2012-08-31 13 views
7

Sto provando a modificare l'indicazione del tempo (valore predefinito su 4/4) in un MusicSequence ma non riesco a capire come farlo. Ho 2 MusicTracks all'interno della sequenza e un MusicPlayer anche per riprodurre la musica. Come posso cambiare questo valore?Modifica segnatura del tempo in MusicSequence

EDIT:

Adesso so che ho bisogno di aggiungere un evento TIME SIG al MusicSequence traccia Tempo. So che posso ottenere questa traccia con MusicSequenceGetTempoTrack, ma come faccio ad aggiungere un evento time sig ad esso?

EDIT 2:

La ricerca mi sono reso conto che ho bisogno di creare un MusicTrackExtendedMetaEvent alla musica traccia Tempo. Ora ho bisogno di sapere come formattare correttamente MIDIMetaEvent (so che 88 è il metaEventType ma non so come aggiungere il resto delle informazioni).

+0

sei finito per capire come creare ora dell'evento signiture mete? – Nikolozi

risposta

5

Dopo 4 ore di sprecare su questo ho capito come farlo. Ecco il codice:

//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); 

Ecco un riferimento alla specifica file MIDI per cercare codici di firma di tempo per http://www.somascape.org/midi/tech/mfile.html

+2

Ricordarsi di cancellare prima la traccia del tempo o finire con 2 segnature temporali nel file MIDI. 'code'MusicTrack tempoTrack; MusicSequenceGetTempoTrack (sequenza e tempoTrack); MusicTrackClear (tempoTrack, 0, 1); 'codice' – fdiaz

+0

MIDIMetaEvent assegna solo 1 byte per i dati, chissà a quale memoria si stanno scrivendo gli altri 3 byte. – voidref

+1

La firma del tempo è espressa in 4 numeri. nn e dd rappresentano il "numeratore" e "denominatore" della firma come notata su spartiti. Il denominatore è una potenza negativa di 2: 2 = semiminima, 3 = ottava, 4 = 16 ecc. Http://www.blitter.com/~russtopia/MIDI/~jglatt/tech/midifile/time.htm – johndpope

Problemi correlati