From 9f0b465d5a8ecb0b68b078ecf052fd310ca518bd Mon Sep 17 00:00:00 2001 From: Majora Date: Tue, 6 May 2014 15:10:34 +0200 Subject: [PATCH] =?UTF-8?q?Voil=C3=A0=20la=20nouvelle=20fonction=20lecture?= =?UTF-8?q?=20utilisant=20FMODex.=20Le=20morceau=20concernant=20le=20pitch?= =?UTF-8?q?=20est=20pas=20tout=20=C3=A0=20fait=20fini,=20il=20suffit=20de?= =?UTF-8?q?=20cr=C3=A9er=20un=20entier=20=C3=A9gal=20=C3=A0=201=20et=20de?= =?UTF-8?q?=20le=20multiplier/diviser=20par=202^(1/12)=20autant=20de=20foi?= =?UTF-8?q?s=20que=20l'on=20monte=20ou=20descend=20d'un=20demi-ton,=20puis?= =?UTF-8?q?=20de=20donner=20cette=20valeur=20au=20param=C3=A8tre=20du=20pi?= =?UTF-8?q?tch=20shifter=20ligne=2017.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sources/lecture/lecture.c | 89 ++++++++++++++++++++++++++++++--------- sources/lecture/lecture.h | 2 + 2 files changed, 70 insertions(+), 21 deletions(-) diff --git a/sources/lecture/lecture.c b/sources/lecture/lecture.c index b8d5856..3da610c 100644 --- a/sources/lecture/lecture.c +++ b/sources/lecture/lecture.c @@ -6,10 +6,16 @@ void lireTick (Motif* m, int tmp, Mix_Chunk* chunk[], int nbrPortees) { // On for (int chaine = 0; chaine < nbrPortees; chaine++) { // On va lire les chaines une à une par numéro croissant if (m != NULL) { - if (getInstrument(m,0,tmp) == -1) Mix_HaltChannel(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 { if (getNote(m,0,tmp) != 0) { - Mix_PlayChannel(chaine, chunk[getInstrument(m,chaine,tmp)], -1); // Sinon le sample de la chaine est joué en boucle + FMOD_System_PlaySound(system, FMOD_CHANNEL_FREE, sample[getInstrument(m,chaine,tmp)], 0, &chan[chaine]); + + //Ici on va s'occuper du pitch + FMOD_DSP *pitch; + FMOD_System_CreateDSPByType(system, FMOD_DSP_TYPE_PITCHSHIFT, &pitch); + FMOD_DSP_SetParameter(pitch, FMOD_DSP_PITCHSHIFT_PITCH, 2); + FMOD_Channel_AddDSP(chan1, pitch, 0); } } } @@ -18,26 +24,60 @@ void lireTick (Motif* m, int tmp, Mix_Chunk* chunk[], int nbrPortees) { // On tempsPrecedent = tempsPrecedent + 125; } + + void lecture (int nombreChaines, Motif* melodie[]) { - // Tout ça c'est pour ouvrir le périphérique audio - int audio_rate = 44100; - Uint16 audio_format = AUDIO_S16; /* 16-bit stereo */ - int audio_channels = 1; - int audio_buffers = 4096; - SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO); - if(Mix_OpenAudio(audio_rate, audio_format, audio_channels, audio_buffers)) { - printf("Unable to open audio!\n"); - exit(1); - } - + + FMOD_SYSTEM *system; + + FMOD_RESULT resultat; + + + 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) + + //INITIALISATION SAMPLES ET CHANNELS - Mix_AllocateChannels(nombreChaines); // On ouvre le nombre de chaines nécessaires dans le mixer - Mix_Chunk* chunk[5]; - chunk[0] = Mix_LoadWAV("lecture/0.wav"); - chunk[1] = Mix_LoadWAV("lecture/1.wav"); - chunk[2] = Mix_LoadWAV("lecture/2.wav"); - chunk[3] = Mix_LoadWAV("lecture/3.wav"); - chunk[4] = Mix_LoadWAV("lecture/4.wav"); + + FMOD_CHANNEL *chan[nombreChaines]; // 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 + + resultat = FMOD_System_CreateStream(system, "lecture/0.wav", FMOD_SOFTWARE | FMOD_2D | FMOD_LOOP_NORMAL, 0, &sample[0]); + if (resultat != FMOD_OK) + { + fprintf(stderr, "Impossible de lire le fichier audio\n"); + exit(EXIT_FAILURE); + } + + resultat = FMOD_System_CreateStream(system, "lecture/1.wav", FMOD_SOFTWARE | FMOD_2D | FMOD_LOOP_NORMAL, 0, &sample[1]); + if (resultat != FMOD_OK) + { + fprintf(stderr, "Impossible de lire le fichier audio\n"); + exit(EXIT_FAILURE); + } + + resultat = FMOD_System_CreateStream(system, "lecture/2.wav", FMOD_SOFTWARE | FMOD_2D | FMOD_LOOP_NORMAL, 0, &sample[2]); + if (resultat != FMOD_OK) + { + fprintf(stderr, "Impossible de lire le fichier audio\n"); + exit(EXIT_FAILURE); + } + + resultat = FMOD_System_CreateStream(system, "lecture/3.wav", FMOD_SOFTWARE | FMOD_2D | FMOD_LOOP_NORMAL, 0, &sample[3]); + if (resultat != FMOD_OK) + { + fprintf(stderr, "Impossible de lire le fichier audio\n"); + exit(EXIT_FAILURE); + } + + resultat = FMOD_System_CreateStream(system, "lecture/4.wav", FMOD_SOFTWARE | FMOD_2D | FMOD_LOOP_NORMAL, 0, &sample[4]); + if (resultat != FMOD_OK) + { + fprintf(stderr, "Impossible de lire le fichier audio\n"); + exit(EXIT_FAILURE); + } + //Lecture des motifs for (courant = 0; courant < taille; courant++) { @@ -46,6 +86,13 @@ void lecture (int nombreChaines, Motif* melodie[]) { lireTick (melodie[courant], i, chunk, nombreChaines); } } - Mix_CloseAudio(); + + //On relache le système FMOD + for (int i = 0; i <= nombreChaines; i++) { + FMOD_Sound_Release(sample[i]); + } + FMOD_System_Close(system); + FMOD_System_Release(system); + SDL_Quit(); } diff --git a/sources/lecture/lecture.h b/sources/lecture/lecture.h index 26c47de..25aae9a 100644 --- a/sources/lecture/lecture.h +++ b/sources/lecture/lecture.h @@ -3,11 +3,13 @@ #include "../melodie/melodie.h" +// #include "../instruments/instrument.h" #include #include #include #include +#include #define NBR_MS