diff --git a/sources/lecture/lecture.c b/sources/lecture/lecture.c index 7d0da7c..6da43cf 100644 --- a/sources/lecture/lecture.c +++ b/sources/lecture/lecture.c @@ -1,99 +1,100 @@ #include "lecture.h" -void lireTick (FMOD_SYSTEM* system, Motif* m, int tmp, FMOD_SOUND* sample[], FMOD_CHANNEL* chan[], int nbrPortees) { // On va lire les ticks (plus petite division temporelle de la playlist) de haut en bas +void lireTick (FMOD_SYSTEM* system, Motif* m, int tmp, FMOD_SOUND* sample[], FMOD_CHANNEL* chan[], int nbrPortees, int tempo) { // On va lire les ticks (plus petite division temporelle de la playlist) de haut en bas - int tempsPrecedent = SDL_GetTicks(); + //int tempsPrecedent = SDL_GetTicks(); for (int chaine = 0; chaine < nbrPortees; chaine++) { // On va lire les chaines une à une par numéro croissant if (m != NULL) { if (getInstrument(m,0,tmp) == -1) FMOD_Channel_Stop(chan[chaine]); // Si la note est un silence, la chaine s'arrête else { if (getNote(m,0,tmp) != 0) { - FMOD_System_PlaySound(system, FMOD_CHANNEL_FREE, sample[getInstrument(m,chaine,tmp)], 0, &chan[chaine]); + FMOD_System_PlaySound(system, FMOD_CHANNEL_FREE, sample[getInstrument(m,chaine,tmp)], 0, &chan[chaine]); - //Ici on va s'occuper du pitch - FMOD_DSP *pitch; - FMOD_System_CreateDSPByType(system, FMOD_DSP_TYPE_PITCHSHIFT, &pitch); - FMOD_DSP_SetParameter(pitch, FMOD_DSP_PITCHSHIFT_PITCH, 2); - FMOD_Channel_AddDSP(chan[1], pitch, 0); // C'est quoi chan1 ??? Je l'ai remplacé par chan[1], vu que chan1 est as déclaré... - // On va passer une bonne journée... + //Ici on va s'occuper du pitch + FMOD_DSP *pitch; + FMOD_System_CreateDSPByType(system, FMOD_DSP_TYPE_PITCHSHIFT, &pitch); + FMOD_DSP_SetParameter(pitch, FMOD_DSP_PITCHSHIFT_PITCH, 2); + FMOD_Channel_AddDSP(chan[1], pitch, 0); // C'est quoi chan1 ??? Je l'ai remplacé par chan[1], vu que chan1 est as déclaré... + // On va passer une bonne journée... } } } } - while (SDL_GetTicks() - tempsPrecedent < 125) {} // Si 250 ms se sont écoulées (il faudra régler ce temps sur le tempo) - tempsPrecedent = tempsPrecedent + 125; + /* while (SDL_GetTicks() - tempsPrecedent < 125) {} // Si 125 ms se sont écoulées (il faudra régler ce temps sur le tempo) + tempsPrecedent = tempsPrecedent + 125; + Avouez que ce serait con qu'on ait besoin de SDL juste pour la temporisation + alors qu'on peut utiliser la fonction native usleep pour ça, et beaucoup plus simplement. */ + usleep(60000/tempo); } -void lecture (int nombreChaines, Motif* melodie[]) { +void lecture (int nombreChaines, int tempo, Motif* melodie[]) { - FMOD_SYSTEM *system; + FMOD_SYSTEM *system; - FMOD_RESULT resultat; + FMOD_RESULT resultat; - FMOD_System_Create(&system); - FMOD_System_Init(system, 8, FMOD_INIT_NORMAL, NULL); //Le deuxième argument donne le nombre de canal à utiliser (nombre de chaines) + FMOD_System_Create(&system); + FMOD_System_Init(system, 8, FMOD_INIT_NORMAL, NULL); //Le deuxième argument donne le nombre de canal à utiliser (nombre de chaines) //INITIALISATION SAMPLES ET CHANNELS - FMOD_CHANNEL *chan[nombreChaines]; // On ouvre le nombre de chaines nécessaires dans le mixer + FMOD_CHANNEL **chan = malloc(nombreChaines*sizeof(FMOD_CHANNEL*)); // On ouvre le nombre de chaines nécessaires dans le mixer - FMOD_SOUND *sample[5]; // On charge les samples avec un message d'erreur en cas d'échec + FMOD_SOUND *sample[5]; // On charge les samples avec un message d'erreur en cas d'échec resultat = FMOD_System_CreateStream(system, "lecture/0.wav", FMOD_SOFTWARE | FMOD_2D | FMOD_LOOP_NORMAL, 0, &sample[0]); - if (resultat != FMOD_OK) - { - fprintf(stderr, "Impossible de lire le fichier audio\n"); - exit(EXIT_FAILURE); - } + if (resultat != FMOD_OK) + { + fprintf(stderr, "Impossible de lire le fichier audio\n"); + exit(EXIT_FAILURE); + } - resultat = FMOD_System_CreateStream(system, "lecture/1.wav", FMOD_SOFTWARE | FMOD_2D | FMOD_LOOP_NORMAL, 0, &sample[1]); - if (resultat != FMOD_OK) - { - fprintf(stderr, "Impossible de lire le fichier audio\n"); - exit(EXIT_FAILURE); - } + resultat = FMOD_System_CreateStream(system, "lecture/1.wav", FMOD_SOFTWARE | FMOD_2D | FMOD_LOOP_NORMAL, 0, &sample[1]); + if (resultat != FMOD_OK) + { + fprintf(stderr, "Impossible de lire le fichier audio\n"); + exit(EXIT_FAILURE); + } - resultat = FMOD_System_CreateStream(system, "lecture/2.wav", FMOD_SOFTWARE | FMOD_2D | FMOD_LOOP_NORMAL, 0, &sample[2]); - if (resultat != FMOD_OK) - { - fprintf(stderr, "Impossible de lire le fichier audio\n"); - exit(EXIT_FAILURE); - } + resultat = FMOD_System_CreateStream(system, "lecture/2.wav", FMOD_SOFTWARE | FMOD_2D | FMOD_LOOP_NORMAL, 0, &sample[2]); + if (resultat != FMOD_OK) + { + fprintf(stderr, "Impossible de lire le fichier audio\n"); + exit(EXIT_FAILURE); + } - resultat = FMOD_System_CreateStream(system, "lecture/3.wav", FMOD_SOFTWARE | FMOD_2D | FMOD_LOOP_NORMAL, 0, &sample[3]); - if (resultat != FMOD_OK) - { - fprintf(stderr, "Impossible de lire le fichier audio\n"); - exit(EXIT_FAILURE); - } + resultat = FMOD_System_CreateStream(system, "lecture/3.wav", FMOD_SOFTWARE | FMOD_2D | FMOD_LOOP_NORMAL, 0, &sample[3]); + if (resultat != FMOD_OK) + { + fprintf(stderr, "Impossible de lire le fichier audio\n"); + exit(EXIT_FAILURE); + } - resultat = FMOD_System_CreateStream(system, "lecture/4.wav", FMOD_SOFTWARE | FMOD_2D | FMOD_LOOP_NORMAL, 0, &sample[4]); - if (resultat != FMOD_OK) - { - fprintf(stderr, "Impossible de lire le fichier audio\n"); - exit(EXIT_FAILURE); - } + resultat = FMOD_System_CreateStream(system, "lecture/4.wav", FMOD_SOFTWARE | FMOD_2D | FMOD_LOOP_NORMAL, 0, &sample[4]); + if (resultat != FMOD_OK) + { + fprintf(stderr, "Impossible de lire le fichier audio\n"); + exit(EXIT_FAILURE); + } //Lecture des motifs for (courant = 0; courant < taille; courant++) { for (int i = 0; i < melodie[courant] -> nbrTmp; i++) { printf("lecture temps %d : N=%d I=%d\n",i,getNote(melodie[courant],0,i),getInstrument(melodie[courant],0,i)); - lireTick (system, melodie[courant], i, sample, chan, nombreChaines); + lireTick (system, melodie[courant], i, sample, chan, nombreChaines, tempo); } } //On relache le système FMOD for (int i = 0; i <= nombreChaines; i++) { - FMOD_Sound_Release(sample[i]); + FMOD_Sound_Release(sample[i]); } - FMOD_System_Close(system); - FMOD_System_Release(system); - - SDL_Quit(); + FMOD_System_Close(system); + FMOD_System_Release(system); } diff --git a/sources/lecture/lecture.h b/sources/lecture/lecture.h index 62db047..8a92009 100644 --- a/sources/lecture/lecture.h +++ b/sources/lecture/lecture.h @@ -4,15 +4,15 @@ #include "../melodie/melodie.h" // #include "../instruments/instrument.h" - -#include -#include +// #include +// #include #include #include +#include #include "../fmod/include/fmod.h" #define NBR_MS -void lecture(int nbrChaines, Motif* melodie[]); +void lecture(int nbrChaines, int tempo, Motif* melodie[]); #endif