diff --git a/.gitignore b/.gitignore index bea6a33..800fca8 100644 --- a/.gitignore +++ b/.gitignore @@ -26,4 +26,6 @@ sources/main.o sources/melodie.o sources/motifs.o sources/ponytracker -sources/lecture/.lecture.c.swp \ No newline at end of file +sources/lecture/.lecture.c.swp +sources/lecture/.lecture.h.swp +sources/lecture/lecture.o \ No newline at end of file diff --git a/sources/GUI/premierTest b/sources/GUI/premierTest deleted file mode 100644 index 3d99263..0000000 Binary files a/sources/GUI/premierTest and /dev/null differ diff --git a/sources/lecture/lecture.c b/sources/lecture/lecture.c index c8c7140..a05a33d 100644 --- a/sources/lecture/lecture.c +++ b/sources/lecture/lecture.c @@ -1,44 +1,31 @@ -#include -#include -#include -#include -#include -#include +#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(); -void lecture (int nombreChaine) { + 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 *1 = Mix_LoadWAV("Square.wav"); // Import du sample Square - Mix_Chunk *2 = Mix_LoadWAV("Saw.wav"); // Import du sample Saw - + 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 < 4; courant++) { + for (courant = 0; courant < taille; courant++) { for (int i = 0; i < melodie[courant] -> nbrTmp; i++) { - lireTick (int getInstrument(m, portee, tmp), int tmp); + lireTick (melodie[courant], i, chunk, nombreChaines); } } Mix_CloseAudio(); SDL_Quit(); } - - -void lireTick (int n, int tmp) { // On va lire les ticks (plus petite division temporelle de la playlist) de haut en bas - - int tempsPrecedent = SDL_GetTicks(), tempsActuel = SDL_GetTicks(); - - for (int chaine = 0; chaine <= nombreChaines; chaine++) { // On va lire les chaines une à une par numéro croissant - if n != NULL { - if n -> note = 0 Mix_HaltChannel(chaine); // Si la note est un silence, la chaine s'arrête - else Mix_PlayChannel(chaine, Mix_Chunk *chaine, -1); // Sinon le sample de la chaine est joué en boucle - } - while (tempsActuel - tempsPrecedent > 250) { // Si 250 ms se sont écoulées (il faudra régler ce temps sur le tempo) - tempsActuel = SDL_GetTicks(); - } - tempsPrecedent = tempsActuel; // On actualise l'horloge du programme - } -} diff --git a/sources/lecture/lecture.h b/sources/lecture/lecture.h new file mode 100644 index 0000000..4bd1b91 --- /dev/null +++ b/sources/lecture/lecture.h @@ -0,0 +1,17 @@ +#ifndef _LECTURE_H +#define _LECTURE_H + + +#include "../melodie/melodie.h" +// #include "../instruments/instrument.h" + +#include +#include +#include +#include + +#define NBR_MS + +void lecture(int nbrChaines, Motif* melodie[]); + +#endif diff --git a/sources/main.c b/sources/main.c index f98d18d..656da85 100644 --- a/sources/main.c +++ b/sources/main.c @@ -3,6 +3,7 @@ #include "motifs/motifs.h" #include "melodie/melodie.h" +#include "lecture/lecture.h" #define DEF_NBR_TMP 16 #define MAX_PATTERNS 256 @@ -44,6 +45,7 @@ int main(){ taille = 0; debut(melodie, liste, nbrPortees); + lecture(nbrPortee, melodie); // insérer code GTK ici