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:
BIN
sources/lecture/Saw.wav
Normal file
BIN
sources/lecture/Saw.wav
Normal file
Binary file not shown.
BIN
sources/lecture/Square.wav
Normal file
BIN
sources/lecture/Square.wav
Normal file
Binary file not shown.
44
sources/lecture/lecture.c
Normal file
44
sources/lecture/lecture.c
Normal file
@@ -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 <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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user