2012-08-31 17 views
7

我试图更改MusicSequence中的拍号(默认为4/4),但我似乎无法理解如何执行此操作。我有2 MusicTracks在序列和一个MusicPlayer也重现音乐。我怎样才能改变这个值?更改MusicSequence中的拍号

编辑:

我现在,我需要一个时间西格事件添加到MusicSequence速度轨知道。我知道我可以通过MusicSequenceGetTempoTrack获得此曲目,但是如何向它添加时间标记事件?

编辑2:

研究,我意识到,我需要创建一个MusicTrackExtendedMetaEvent音乐速度轨。现在我需要知道如何正确地格式化MIDIMetaEvent(我知道88是metaEventType,但不知道如何添加其余的信息)。

+0

你最终搞清楚如何创建时间signiture METE事件? – Nikolozi

回答

5

在浪费了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); 

下面是MIDI文件规范的引用来查找时间签名代码http://www.somascape.org/midi/tech/mfile.html

+2

记得先清除节奏音轨,否则最终会在MIDI文件中出现2个时间签名。 'code'MusicTrack tempoTrack; MusicSequenceGetTempoTrack(sequence,&tempoTrack); MusicTrackClear(tempoTrack,0,1); 'code' – fdiaz

+0

MIDIMetaEvent只为数据分配1个字节,谁知道你正在写另外3个字节的内存。 – voidref

+1

拍号表示为4个数字。 nn和dd代表乐谱上记录的签名的“分子”和“分母”。分母是2:2 =四分音符,3 =八分音符,4 = 16等的负电源。http://www.blitter.com/~russtopia/MIDI/~jglatt/tech/midifile/time.htm – johndpope