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:
Majora 2014-04-07 20:51:04 +02:00
parent e87cf7e5fe
commit 3cdcc213fa
3 changed files with 44 additions and 0 deletions

BIN
sources/lecture/Saw.wav Normal file

Binary file not shown.

BIN
sources/lecture/Square.wav Normal file

Binary file not shown.

44
sources/lecture/lecture.c Normal file
View 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 à 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
}
}