首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >零位置的BASS_MIDI_StreamEvent

零位置的BASS_MIDI_StreamEvent
EN

Stack Overflow用户
提问于 2012-01-19 16:57:27
回答 1查看 441关注 0票数 0

我在iPhone开发中使用BASS_MIDI。我从这样的文件创建midiStream

代码语言:javascript
复制
midiStream = BASS_MIDI_StreamCreateFile(false, filePath, 0, 0, 0, 44100);

然后我播放/定位/暂停它,改变音量和节奏。我在播放之前改变节奏(为了控制播放速度),就像这样

代码语言:javascript
复制
BASS_MIDI_StreamEvent(midiStream, 0, MIDI_EVENT_TEMPO, currentTempo);//microseconds per quarter note
BASS_ChannelPlay(midiStream, false);

它工作得很好,但我有一个问题。如果midistream的位置为0,则速度不会改变(音量和另一个BASS_MIDI_StreamEvent的也不起作用)。如果像这样改变调用顺序

代码语言:javascript
复制
BASS_ChannelPlay(midiStream, false);
BASS_MIDI_StreamEvent(midiStream, 0, MIDI_EVENT_TEMPO, currentTempo);//microseconds per quarter note

然后我会有一些延迟(播放开始的速度不正确,它会在半秒或更短的时间内改变。我怎么才能修复它?有没有办法在玩零位置之前调用事件?

另外,我为我糟糕的英语感到抱歉。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-26 17:21:34

答案建立在官方低音论坛上。

问题是你的事件被MIDI文件中的事件覆盖了。为了避免这种情况,您可以使用"mixtime“BASS_SYNC_MIDI_EVENT同步来覆盖文件的事件。可以在MIDITEST示例中找到这一点的演示(从其他平台的BASSMIDI包中获得它)...

代码语言:javascript
复制
{ // 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文件的值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8923341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档