ponytracker/sources/lecture/lecture.c

35 lines
1.4 KiB
C

#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 (getNote(m,0,tmp) == -1) Mix_HaltChannel(chaine); // Si la note est un silence, la chaine s'arrête
else {
Mix_PlayChannel(-1, chunk[getInstrument(m,chaine,tmp)], -1); // Sinon le sample de la chaine est joué en boucle
}
}
}
while (SDL_GetTicks() - tempsPrecedent < 250) {} // Si 250 ms se sont écoulées (il faudra régler ce temps sur le tempo)
tempsPrecedent = tempsPrecedent + 250;
}
void lecture (int nombreChaines, Motif* melodie[]) {
SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO);
//INITIALISATION SAMPLES ET CHANNELS
Mix_AllocateChannels(nombreChaines); // On ouvre le nombre de chaines nécessaires dans le mixer
Mix_Chunk* chunk[2] = {Mix_LoadWAV("Square.wav"), Mix_LoadWAV("Saw.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();
}