在MusicSequence中更改时间签名

fdi*_*iaz 8 iphone midi ios ios5 musicsequence

我正在尝试在MusicSequence中更改时间签名(默认为4/4),但我似乎不明白如何执行此操作.我在序列中有2个MusicTracks,还有一个MusicPlayer来重现音乐.我该如何更改此值?

编辑:

我现在知道我需要在MusicSequence Tempo Track中添加Time Sig事件.我知道我可以使用MusicSequenceGetTempoTrack获取此曲目,但如何为其添加时间sig事件?

编辑2:

研究我意识到我需要为Music Tempo Track 创建一个MusicTrackExtendedMetaEvent.现在我需要知道如何正确格式化MIDIMetaEvent(我知道88是metaEventType但不知道如何添加其余的信息).

Nik*_*ozi 6

经过4次浪费4个小时后,我想出了怎么做.这里的代码:

//Getting the tempo track
MusicTrack tempoTrack;
MusicSequenceGetTempoTrack (musicSequence, &tempoTrack);

//Set time signature to 7/16
MIDIMetaEvent timeSignatureMetaEvent;
timeSignatureMetaEvent.metaEventType = 0x58;
timeSignatureMetaEvent.dataLength = 4;
timeSignatureMetaEvent.data[0] = 0x07;
timeSignatureMetaEvent.data[1] = 0x04;
timeSignatureMetaEvent.data[2] = 0x18;
timeSignatureMetaEvent.data[3] = 0x08;
MusicTrackNewMetaEvent(tempoTrack, 0, &timeSignatureMetaEvent);
Run Code Online (Sandbox Code Playgroud)

这里是对MIDI文件规范的引用,用于查找时间签名代码到http://www.somascape.org/midi/tech/mfile.html

  • 请记住首先清除速度轨道,否则您的MIDI文件中最终会有2个时间签名.`code`MusicTrack tempoTrack; MusicSequenceGetTempoTrack(sequence,&tempoTrack); MusicTrackClear(tempoTrack,0,1); `code` (2认同)