2012-08-31 7 views
7

MusicSequenceの拍子記号(デフォルトは4/4)を変更しようとしていますが、これを行う方法がわかりません。私はシーケンスの中に2 MusicTracksを持っていて、MusicPlayerも音楽を再現しています。この値を変更するにはどうすればよいですか?MusicSequenceの拍子記号を変更する

編集:私は今、私はMusicSequenceテンポトラックにタイムSigのイベントを追加する必要があることを知っている

。私はMusicSequenceGetTempoTrackでこのトラックを手に入れることができると知っていますが、どのようにそれに時間のsigイベントを追加しますか?

EDIT 2:

は私が音楽テンポトラックにMusicTrackExtendedMetaEventを作成する必要があることに気づい研究します。今私は正しくフォーマットする方法を知る必要がありますMIDIMetaEvent(私は88がmetaEventTypeですが、残りの情報を追加する方法はわかりません)。

+0

に拍子コードをルックアップするためのMIDIファイル仕様への参照ですが、あなたは時間signitureのMETEイベントを作成する方法を考え出す終わるでしたか? – Nikolozi

答えて

5

これで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); 

ここhttp://www.somascape.org/midi/tech/mfile.html

+2

テンポトラックをクリアすると、MIDIファイルに2つの拍子記号が表示されます。 'code'MusicTrack tempoTrack; MusicSequenceGetTempoTrack(シーケンス、&tempoTrack); MusicTrackClear(tempoTrack、0、1); 'code' – fdiaz

+0

MIDIMetaEventは、他の3バイトを書き込んでいるメモリを知っているデータ用に1バイトしか割り当てません。 – voidref

+1

拍子記号は4つの数字で表されます。 nnとddは、楽譜に記された署名の「分子」と「分母」を表します。分母は、2:2 = 4分音符、3 = 8分の4、16分の16などの負のパワーです。http://www.blitter.com/~russtopia/MIDI/~jglatt/tech/midifile/time.htm – johndpope

関連する問題