#include #include #include #include #include #include void lecture (int nombreChaine) { 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 //Lecture des motifs for (courant = 0; courant < 4; courant++) { for (int i = 0; i < melodie[courant] -> nbrTmp; i++) { lireTick (int getInstrument(m, portee, tmp), int tmp); } } 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 } }