#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(chaine, chunk[getInstrument(m,nbrPortees,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; // On actualise l'horloge du programme
	}
}

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++) {
			lireTick (melodie[courant], i, chunk, nombreChaines);
		}
	}
	Mix_CloseAudio();
	SDL_Quit();
}
