Voici la fonction lecture. Elle initialise l'audio, ouvre un nombre de chaines audio défini en argument, et importe les samples (ici Square et Saw).
Ensuite elle va chercher les notes du morceau à jouer avec getInstrument (corrige-moi si je me suis gourré Guy) et elle les lit un à un en balayant les chaines et en jouant les samples correspondants au numéro de la chaine (ici aussi je sais pas si j'ai merdé ou pas avec les pointeurs les adresses etc...) On ne se sert pas du tout du module "instrument" mais c'est pas plus mal. Le module instrument risque de ne servir qu'à la création d'instrument (numéro de chaine et/ou de sample à importer) plus tard.
This commit is contained in:
parent
e87cf7e5fe
commit
3cdcc213fa
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,44 @@
|
|||
#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 à 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
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue