#include #include "midifile.h" void read_midi(char * midifile); int main (int argc, char *argv[]) { read_midi(argv[1]); } void read_midi(char * midifile) { int i, j, pitch, duration; int max, imax, somme; int profil[12] = {0,0,0,0,0,0,0,0,0,0,0,0}; double krumhansl_M[12] = {6.35,2.23,3.48,2.33,4.38,4.09,2.52,5.19,2.39,3.66,2.29,2.88}; double krumhansl_m[12] = {6.33,2.68,3.52,5.38,2.6,3.53,2.54,4.75,3.98,2.69,3.34,3.17}; double temperley_M[12] = {5,2,3.5,2,4.5,4,2,4.5,2,3.5,1.5,4}; double temperley_m[12] = {5,2,3.5,4.5,2,4,2,4.5,3.5,2,1.5,4}; MidiFileEvent_t event; unsigned char *data; MidiFile_t md = MidiFile_load(midifile); event = MidiFile_getFirstEvent(md); /* boucle principale */ while(event) { if (MidiFileEvent_isNoteStartEvent(event)) { /* note start */ // Channel int chan = MidiFileNoteStartEvent_getChannel(event); // Attention channel 10 !! if (chan != 10) { // Hauteur (Pitch) pitch = MidiFileNoteStartEvent_getNote(event); printf("Note jouee : %d, ", pitch); // Durée (Duration) duration = MidiFileEvent_getTick(MidiFileNoteStartEvent_getNoteEndEvent(event))-MidiFileEvent_getTick(event); printf("duree %d\n", duration); // Profil de notes à construire } } event = MidiFileEvent_getNextEventInFile(event); } /* Profil de notes à afficher */ /* Corrélation avec profils de référence */ /* Tonalité estimée à afficher */ }