2012-01-19 65 views
0

我在iPhone開發中使用BASS_MIDI。我從這樣的文件創建midiStream零位BASS_MIDI_StreamEvent

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 

改變調用順序的話,我有一定的滯後性(播放不正確的啓動速度和它半秒後更改,或更低。 我該如何解決呢?有沒有一種方法來調用在零位前打事件?

PS對不起,我英文不好。

回答

0

答成立於offecial 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文件的值當尋求也是如此。