#include "lecture.h" void lireTick (Motif* m, int tmp, Mix_Chunk* chunk[], int nbrPortees) { // On va lire les ticks (plus petite division temporelle de la playlist) de haut en bas 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) Mix_HaltChannel(chaine); // Si la note est un silence, la chaine s'arrête else { if (getNote(m,0,tmp) != 0) { Mix_PlayChannel(chaine, chunk[getInstrument(m,chaine,tmp)], -1); // Sinon le sample de la chaine est joué en boucle } } } } while (SDL_GetTicks() - tempsPrecedent < 125) {} // Si 250 ms se sont écoulées (il faudra régler ce temps sur le tempo) tempsPrecedent = tempsPrecedent + 125; } void lecture (int nombreChaines, Motif* melodie[]) { // Tout ça c'est pour ouvrir le périphérique audio int audio_rate = 44100; Uint16 audio_format = AUDIO_S16; /* 16-bit stereo */ int audio_channels = 1; int audio_buffers = 4096; SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO); if(Mix_OpenAudio(audio_rate, audio_format, audio_channels, audio_buffers)) { printf("Unable to open audio!\n"); exit(1); } //INITIALISATION SAMPLES ET CHANNELS Mix_AllocateChannels(nombreChaines); // On ouvre le nombre de chaines nécessaires dans le mixer Mix_Chunk* chunk[5]; chunk[0] = Mix_LoadWAV("lecture/0.wav"); chunk[1] = Mix_LoadWAV("lecture/1.wav"); chunk[2] = Mix_LoadWAV("lecture/2.wav"); chunk[3] = Mix_LoadWAV("lecture/3.wav"); chunk[4] = Mix_LoadWAV("lecture/4.wav"); //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 (melodie[courant], i, chunk, nombreChaines); } } Mix_CloseAudio(); SDL_Quit(); }