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 <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
}
}