iphone - BASS_MIDI_StreamEvent在零位置

标签 iphone audio midi bass

我在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/

相关文章:

ios - 为什么我的 UITableView 不显示数据?

iphone - 如何为iPhone制作一个简单的音频均衡器?

iphone - 模拟对象的惯性滚动

cocoa-touch - Cocoa Touch - 假设的滞后比较

用于检测系统音量(声音)和插入的音频插孔的 Javascript

c# - 错误的 .wav 格式录制音频 NAudio 库

c++ - 读取 midi 文件

python - 如何从 Ableton Live 控制表面脚本将 MIDI 数据发送到我的 Arduino 板

iphone - 在 Xcode 4.2 iOS SDK 5.0 中使用 GCC 4.2

java - Head First Java——创建第一个音乐播放器报错