#include #include #include #include //char oct1[2]="\0"; //char octb[2]="\0"; //compare si 2 octets sont egaux int compareoctet(char a[2], char b[2]){ int bo =1, i=0, cpt=0; while (i<2) { if(a[i] == b[i]) cpt++; i++; } if(cpt != 2) bo=0; return bo; } //converti l'octet passé en parametre en decimal int convertion(char a[2]) { int l = 0; if (a[0] == '1') l = l + 1*16; if (a[0] == '2') l = l + 2*16; if (a[0] == '3') l = l + 3*16; if (a[0] == '4') l = l + 4*16; if (a[0] == '5') l = l + 5*16; if (a[0] == '6') l = l + 6*16; if (a[0] == '7') l = l + 7*16; if (a[0] == '8') l = l + 8*16; if (a[0] == '9') l = l + 9*16; if (a[0] == 'a') l = l + 10*16; if (a[0] == 'b') l = l + 11*16; if (a[0] == 'c') l = l + 12*16; if (a[0] == 'd') l = l + 13*16; if (a[0] == 'e') l = l + 14*16; if (a[0] == 'f') l = l + 15*16; if (a[1] == '1') l = l + 1; if (a[1] == '2') l = l + 2; if (a[1] == '3') l = l + 3; if (a[1] == '4') l = l + 4; if (a[1] == '5') l = l + 5; if (a[1] == '6') l = l + 6; if (a[1] == '7') l = l + 7; if (a[1] == '8') l = l + 8; if (a[1] == '9') l = l + 9; if (a[1] == 'a') l = l + 10; if (a[1] == 'b') l = l + 11; if (a[1] == 'c') l = l + 12; if (a[1] == 'd') l = l + 13; if (a[1] == 'e') l = l + 14; if (a[1] == 'f') l = l + 15; return l; } void recuperer2octets(FILE* fd,char oct1[2], char octb[2]) { char mot[4]; //char oct1[2]="\0"; //char octb[2]="\0"; fscanf(fd, "%s", mot); int i = 0; for(i=0;i<2;i++) { oct1[i]=mot[i]; octb[i]=mot[i+2]; } octb[2]='\0'; oct1[2]='\0'; //printf("oct1= %s \n oct2= %s \n",oct1, octb); } void recuperer(FILE *fd, char oct1[2], char octb[2]){ //TEST HEADER //Fichier MIDI ? recuperer2octets(fd,oct1,octb); if((compareoctet(oct1,"4d\0")) && (compareoctet(octb,"54\0"))) { printf("Fichier MIDI détecté.\n");} recuperer2octets(fd,oct1,octb); //Longueur recuperer2octets(fd,oct1,octb); int longueur=0; longueur=convertion(oct1); longueur=longueur + convertion(octb); recuperer2octets(fd,oct1,octb); longueur=longueur + convertion(oct1); longueur=longueur + convertion(octb); printf("taille header = %d \n",longueur); //format recuperer2octets(fd,oct1,octb); if(compareoctet(octb,"00\0")) printf("le format est : single track\n"); if(compareoctet(octb,"01\0")) printf("le format est : multiple track\n"); if(compareoctet(octb,"02\0")) printf("le format est : multiple song\n"); //nbre de gros morceaux recuperer2octets(fd,oct1,octb); int n = 0; n=convertion(oct1); n= n + convertion(octb); printf("le nombre de gros morceaux est : %d \n", n); //nbre de tick/beat recuperer2octets(fd,oct1,octb); int ticks = 0; ticks = convertion(oct1); ticks = ticks + convertion(octb); printf("nombre de ticks/beat = %d \n",ticks); //Dans un morceau RECUPERATION DE LA TAILLE DE LA CHANSON à partir du Mrtk recuperer2octets(fd,oct1,octb); if ((compareoctet(oct1,"4d\0")) && (compareoctet(octb,"54\0"))) { printf("morceau?\n"); recuperer2octets(fd,oct1,octb); if ((compareoctet(oct1,"72\0")) && compareoctet(octb,"6b\0")) { printf("oui\n");} recuperer2octets(fd,oct1,octb); int longueur_track = convertion(oct1) *16*16*16*16*16*16; longueur_track = longueur_track + convertion(octb)*16*16*16*16; recuperer2octets(fd,oct1,octb); longueur_track = longueur_track + convertion(oct1)*16*16; longueur_track = longueur_track + convertion(octb); printf("la longueur du morceau est de : %d octets \n", longueur_track); } //Track event //si c'est un meta evenement (commence par 00FF) // le 00 est en fait un timing et peut etre separe en 2 octets pour a voir un timing plus grd ! recuperer2octets(fd,oct1,octb); int time = convertion(oct1); if (oct1 >= 128) { time=(time-8*16)*16*16+convertion(octb); printf("delta time evenement = %d \n"); } if ((compareoctet(octb,"ff\0"))) { printf("meta evenement : \n"); recuperer2octets(fd,oct1,octb); if(compareoctet(oct1,"00\0")) {printf("le numéro de la sequence est: \n");} if(compareoctet(oct1,"01\0")) {printf("evenement text \n");} if(compareoctet(oct1,"02\0")) {printf("copyright notice\n");} if(compareoctet(oct1,"03\0")) {printf("sequence or track name \n");} if(compareoctet(oct1,"04\0")) {printf("instrument name \n");} if(compareoctet(oct1,"05\0")) {printf("lyric text \n");} if(compareoctet(oct1,"06\0")) {printf("marker text \n");} if(compareoctet(oct1,"07\0")) {printf("cue point \n");} if(compareoctet(oct1,"20\0")) {printf("MIDI channel \n");} if(compareoctet(oct1,"2f\0")) {printf("end of track \n");} if(compareoctet(oct1,"51\0")) {printf("tempo setting \n");} if(compareoctet(oct1,"54\0")) {printf("SMPTE offset \n");} if(compareoctet(oct1,"58\0")) {printf("Time signature \n");} if(compareoctet(oct1,"59\0")) {printf("Key signature \n");} if(compareoctet(oct1,"7f\0")) {printf("Sequencer specific event \n");} } } int main() { char oct1[2]="\0"; char octb[2]="\0"; FILE* fd; fd=fopen("hexa3.txt","r"); recuperer(fd, oct1, octb); //recuperer2octets(fd); //recuperer2octets(fd); // fclose(fd); return 0; }