2012-08-31 21 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