#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();
}
