J'ai banni définitivement SDL (utilisé juste pour la temporisation)

This commit is contained in:
Raspbeguy 2014-05-10 17:54:16 +02:00
parent a241329658
commit 13471bd34d
2 changed files with 58 additions and 57 deletions

View File

@ -1,99 +1,100 @@
#include "lecture.h" #include "lecture.h"
void lireTick (FMOD_SYSTEM* system, Motif* m, int tmp, FMOD_SOUND* sample[], FMOD_CHANNEL* chan[], int nbrPortees) { // On va lire les ticks (plus petite division temporelle de la playlist) de haut en bas void lireTick (FMOD_SYSTEM* system, Motif* m, int tmp, FMOD_SOUND* sample[], FMOD_CHANNEL* chan[], int nbrPortees, int tempo) { // On va lire les ticks (plus petite division temporelle de la playlist) de haut en bas
int tempsPrecedent = SDL_GetTicks(); //int tempsPrecedent = SDL_GetTicks();
for (int chaine = 0; chaine < nbrPortees; chaine++) { // On va lire les chaines une à une par numéro croissant for (int chaine = 0; chaine < nbrPortees; chaine++) { // On va lire les chaines une à une par numéro croissant
if (m != NULL) { if (m != NULL) {
if (getInstrument(m,0,tmp) == -1) FMOD_Channel_Stop(chan[chaine]); // Si la note est un silence, la chaine s'arrête if (getInstrument(m,0,tmp) == -1) FMOD_Channel_Stop(chan[chaine]); // Si la note est un silence, la chaine s'arrête
else { else {
if (getNote(m,0,tmp) != 0) { if (getNote(m,0,tmp) != 0) {
FMOD_System_PlaySound(system, FMOD_CHANNEL_FREE, sample[getInstrument(m,chaine,tmp)], 0, &chan[chaine]); FMOD_System_PlaySound(system, FMOD_CHANNEL_FREE, sample[getInstrument(m,chaine,tmp)], 0, &chan[chaine]);
//Ici on va s'occuper du pitch //Ici on va s'occuper du pitch
FMOD_DSP *pitch; FMOD_DSP *pitch;
FMOD_System_CreateDSPByType(system, FMOD_DSP_TYPE_PITCHSHIFT, &pitch); FMOD_System_CreateDSPByType(system, FMOD_DSP_TYPE_PITCHSHIFT, &pitch);
FMOD_DSP_SetParameter(pitch, FMOD_DSP_PITCHSHIFT_PITCH, 2); FMOD_DSP_SetParameter(pitch, FMOD_DSP_PITCHSHIFT_PITCH, 2);
FMOD_Channel_AddDSP(chan[1], pitch, 0); // C'est quoi chan1 ??? Je l'ai remplacé par chan[1], vu que chan1 est as déclaré... FMOD_Channel_AddDSP(chan[1], pitch, 0); // C'est quoi chan1 ??? Je l'ai remplacé par chan[1], vu que chan1 est as déclaré...
// On va passer une bonne journée... // On va passer une bonne journée...
} }
} }
} }
} }
while (SDL_GetTicks() - tempsPrecedent < 125) {} // Si 250 ms se sont écoulées (il faudra régler ce temps sur le tempo) /* while (SDL_GetTicks() - tempsPrecedent < 125) {} // Si 125 ms se sont écoulées (il faudra régler ce temps sur le tempo)
tempsPrecedent = tempsPrecedent + 125; tempsPrecedent = tempsPrecedent + 125;
Avouez que ce serait con qu'on ait besoin de SDL juste pour la temporisation
alors qu'on peut utiliser la fonction native usleep pour ça, et beaucoup plus simplement. */
usleep(60000/tempo);
} }
void lecture (int nombreChaines, Motif* melodie[]) { void lecture (int nombreChaines, int tempo, Motif* melodie[]) {
FMOD_SYSTEM *system; FMOD_SYSTEM *system;
FMOD_RESULT resultat; FMOD_RESULT resultat;
FMOD_System_Create(&system); FMOD_System_Create(&system);
FMOD_System_Init(system, 8, FMOD_INIT_NORMAL, NULL); //Le deuxième argument donne le nombre de canal à utiliser (nombre de chaines) FMOD_System_Init(system, 8, FMOD_INIT_NORMAL, NULL); //Le deuxième argument donne le nombre de canal à utiliser (nombre de chaines)
//INITIALISATION SAMPLES ET CHANNELS //INITIALISATION SAMPLES ET CHANNELS
FMOD_CHANNEL *chan[nombreChaines]; // On ouvre le nombre de chaines nécessaires dans le mixer FMOD_CHANNEL **chan = malloc(nombreChaines*sizeof(FMOD_CHANNEL*)); // On ouvre le nombre de chaines nécessaires dans le mixer
FMOD_SOUND *sample[5]; // On charge les samples avec un message d'erreur en cas d'échec FMOD_SOUND *sample[5]; // On charge les samples avec un message d'erreur en cas d'échec
resultat = FMOD_System_CreateStream(system, "lecture/0.wav", FMOD_SOFTWARE | FMOD_2D | FMOD_LOOP_NORMAL, 0, &sample[0]); resultat = FMOD_System_CreateStream(system, "lecture/0.wav", FMOD_SOFTWARE | FMOD_2D | FMOD_LOOP_NORMAL, 0, &sample[0]);
if (resultat != FMOD_OK) if (resultat != FMOD_OK)
{ {
fprintf(stderr, "Impossible de lire le fichier audio\n"); fprintf(stderr, "Impossible de lire le fichier audio\n");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
resultat = FMOD_System_CreateStream(system, "lecture/1.wav", FMOD_SOFTWARE | FMOD_2D | FMOD_LOOP_NORMAL, 0, &sample[1]); resultat = FMOD_System_CreateStream(system, "lecture/1.wav", FMOD_SOFTWARE | FMOD_2D | FMOD_LOOP_NORMAL, 0, &sample[1]);
if (resultat != FMOD_OK) if (resultat != FMOD_OK)
{ {
fprintf(stderr, "Impossible de lire le fichier audio\n"); fprintf(stderr, "Impossible de lire le fichier audio\n");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
resultat = FMOD_System_CreateStream(system, "lecture/2.wav", FMOD_SOFTWARE | FMOD_2D | FMOD_LOOP_NORMAL, 0, &sample[2]); resultat = FMOD_System_CreateStream(system, "lecture/2.wav", FMOD_SOFTWARE | FMOD_2D | FMOD_LOOP_NORMAL, 0, &sample[2]);
if (resultat != FMOD_OK) if (resultat != FMOD_OK)
{ {
fprintf(stderr, "Impossible de lire le fichier audio\n"); fprintf(stderr, "Impossible de lire le fichier audio\n");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
resultat = FMOD_System_CreateStream(system, "lecture/3.wav", FMOD_SOFTWARE | FMOD_2D | FMOD_LOOP_NORMAL, 0, &sample[3]); resultat = FMOD_System_CreateStream(system, "lecture/3.wav", FMOD_SOFTWARE | FMOD_2D | FMOD_LOOP_NORMAL, 0, &sample[3]);
if (resultat != FMOD_OK) if (resultat != FMOD_OK)
{ {
fprintf(stderr, "Impossible de lire le fichier audio\n"); fprintf(stderr, "Impossible de lire le fichier audio\n");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
resultat = FMOD_System_CreateStream(system, "lecture/4.wav", FMOD_SOFTWARE | FMOD_2D | FMOD_LOOP_NORMAL, 0, &sample[4]); resultat = FMOD_System_CreateStream(system, "lecture/4.wav", FMOD_SOFTWARE | FMOD_2D | FMOD_LOOP_NORMAL, 0, &sample[4]);
if (resultat != FMOD_OK) if (resultat != FMOD_OK)
{ {
fprintf(stderr, "Impossible de lire le fichier audio\n"); fprintf(stderr, "Impossible de lire le fichier audio\n");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
//Lecture des motifs //Lecture des motifs
for (courant = 0; courant < taille; courant++) { for (courant = 0; courant < taille; courant++) {
for (int i = 0; i < melodie[courant] -> nbrTmp; i++) { for (int i = 0; i < melodie[courant] -> nbrTmp; i++) {
printf("lecture temps %d : N=%d I=%d\n",i,getNote(melodie[courant],0,i),getInstrument(melodie[courant],0,i)); printf("lecture temps %d : N=%d I=%d\n",i,getNote(melodie[courant],0,i),getInstrument(melodie[courant],0,i));
lireTick (system, melodie[courant], i, sample, chan, nombreChaines); lireTick (system, melodie[courant], i, sample, chan, nombreChaines, tempo);
} }
} }
//On relache le système FMOD //On relache le système FMOD
for (int i = 0; i <= nombreChaines; i++) { for (int i = 0; i <= nombreChaines; i++) {
FMOD_Sound_Release(sample[i]); FMOD_Sound_Release(sample[i]);
} }
FMOD_System_Close(system); FMOD_System_Close(system);
FMOD_System_Release(system); FMOD_System_Release(system);
SDL_Quit();
} }

View File

@ -4,15 +4,15 @@
#include "../melodie/melodie.h" #include "../melodie/melodie.h"
// #include "../instruments/instrument.h" // #include "../instruments/instrument.h"
// #include <SDL2/SDL.h>
#include <SDL2/SDL.h> // #include <SDL2/SDL_mixer.h>
#include <SDL2/SDL_mixer.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <unistd.h>
#include "../fmod/include/fmod.h" #include "../fmod/include/fmod.h"
#define NBR_MS #define NBR_MS
void lecture(int nbrChaines, Motif* melodie[]); void lecture(int nbrChaines, int tempo, Motif* melodie[]);
#endif #endif