ponytracker/sources/lecture/lecture.c

45 lines
1.5 KiB
C
Raw Normal View History

#include <motifs.h>
#include <instrument.h>
#include <SDL/SDL.h>
#include <SDL_mixer.h>
#include <stdio.h>
#include <stdlib.h>
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 <20> une par num<75>ro croissant
if n != NULL {
if n -> note = 0 Mix_HaltChannel(chaine); // Si la note est un silence, la chaine s'arr<72>te
else Mix_PlayChannel(chaine, Mix_Chunk *chaine, -1); // Sinon le sample de la chaine est jou<6F> en boucle
}
while (tempsActuel - tempsPrecedent > 250) { // Si 250 ms se sont <20>coul<75>es (il faudra r<>gler ce temps sur le tempo)
tempsActuel = SDL_GetTicks();
}
tempsPrecedent = tempsActuel; // On actualise l'horloge du programme
}
}