我在iPhone开发中使用BASS_MIDI。我从这样的文件创建midiStream
midiStream = BASS_MIDI_StreamCreateFile(false, filePath, 0, 0, 0, 44100);
然后我播放/定位/暂停它,更改音量和速度。
我在像这样播放之前改变速度(用于播放速度控制)
BASS_MIDI_StreamEvent(midiStream, 0, MIDI_EVENT_TEMPO, currentTempo);//microseconds per quarter note
BASS_ChannelPlay(midiStream, false);
它工作正常,但我有一个问题。如果midistream的位置为0,则速度不变(音量和另一个BASS_MIDI_StreamEvent的速度也不起作用)。
如果这样改变通话顺序
BASS_ChannelPlay(midiStream, false);
BASS_MIDI_StreamEvent(midiStream, 0, MIDI_EVENT_TEMPO, currentTempo);//microseconds per quarter note
那么我会有一些滞后(播放开始时速度不正确,并且在半秒或更短的时间内发生变化。
我该如何解决?有没有一种方法可以在零位置比赛之前调用事件?
附言对不起,英语不好。
最佳答案
答案建立在官方的BASS论坛上。
那里的问题是您的事件被MIDI文件中的事件所覆盖。为了避免这种情况,您可以使用“mixtime” BASS_SYNC_MIDI_EVENT同步来覆盖文件的事件。可以在MIDITEST示例中找到此演示(从其他平台的BASSMIDI包之一获得)...
{ // override the initial tempo, and set a sync to override tempo events and another to override after seeking
SetTempo(TRUE);
BASS_ChannelSetSync(chan,BASS_SYNC_MIDI_EVENT|BASS_SYNC_MIXTIME,MIDI_EVENT_TEMPO,TempoSync,0);
BASS_ChannelSetSync(chan,BASS_SYNC_SETPOS|BASS_SYNC_MIXTIME,0,TempoSync,0);
}
请注意,它还会设置BASS_SYNC_SETPOS同步,因为在搜索时也会将事件重置为MIDI文件的值。
关于iphone - BASS_MIDI_StreamEvent在零位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8923341/