Système de lecture opérationnel :)
This commit is contained in:
@@ -10,6 +10,7 @@
|
||||
|
||||
#include "lecture.h"
|
||||
|
||||
/*
|
||||
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();
|
||||
@@ -33,16 +34,16 @@ void lireTick (FMOD_SYSTEM* system, Motif* m, int tmp, FMOD_SOUND* sample[], FMO
|
||||
}
|
||||
}
|
||||
}
|
||||
/* while (SDL_GetTicks() - tempsPrecedent < 125) {} // Si 125 ms se sont <20>coul<75>es (il faudra r<>gler ce temps sur le tempo)
|
||||
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 <20>a, et beaucoup plus simplement. */
|
||||
while (SDL_GetTicks() - tempsPrecedent < 125) {} // Si 125 ms se sont <20>coul<75>es (il faudra r<>gler ce temps sur le tempo)
|
||||
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 <20>a, et beaucoup plus simplement.
|
||||
usleep(60000000/tempo);
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
|
||||
void lecture (int nombreChaines, int tempo, Motif* melodie[]) {
|
||||
void lecture (int nombreChaines, int nombreInst, int tempo, Instrument* inst[], Motif* melodie[]) {
|
||||
|
||||
FMOD_SYSTEM *system;
|
||||
|
||||
@@ -57,8 +58,20 @@ void lecture (int nombreChaines, int tempo, Motif* melodie[]) {
|
||||
|
||||
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'<27>chec
|
||||
FMOD_SOUND **sample = malloc(nombreInst*sizeof(FMOD_SOUND*));
|
||||
|
||||
// On charge les samples avec un message d'erreur en cas d'<27>chec
|
||||
|
||||
for (int k = 0; k < nombreInst; k++) {
|
||||
resultat = FMOD_System_CreateStream(system, getChemin(inst[k]), 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/0.wav", FMOD_SOFTWARE | FMOD_2D | FMOD_LOOP_NORMAL, 0, &sample[0]);
|
||||
if (resultat != FMOD_OK)
|
||||
{
|
||||
@@ -93,6 +106,7 @@ void lecture (int nombreChaines, int tempo, Motif* melodie[]) {
|
||||
fprintf(stderr, "Impossible de lire le fichier audio\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
//Lecture des motifs
|
||||
@@ -105,21 +119,21 @@ void lecture (int nombreChaines, int tempo, Motif* melodie[]) {
|
||||
|
||||
// D<>BUT DU COPIER COLLER POTENTIELLEMENT FOIREUX
|
||||
|
||||
m = melodie[courant]
|
||||
for (int chaine = 0; chaine < nombreChaines; chaine++) { // On va lire les chaines une <20> une par num<75>ro croissant
|
||||
m = melodie[courant];
|
||||
for (int chaine = 0; chaine < nombreChaines; chaine++) { // On va lire les chaines une <20> une par num<75>ro croissant
|
||||
if (m != NULL) {
|
||||
if (getInstrument(m,0,tmp) == -1) FMOD_Channel_Stop(chan[chaine]); // Si la note est un silence, la chaine s'arr<72>te
|
||||
if (getInstrument(m,0,i) == -1) FMOD_Channel_Stop(chan[chaine]); // Si la note est un silence, la chaine s'arr<72>te
|
||||
else {
|
||||
|
||||
if (getNote(m,0,tmp) != 0) {
|
||||
if (getNote(m,0,i) != -1) {
|
||||
|
||||
FMOD_Channel_Stop(chan[chaine]);
|
||||
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,i)], 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.0);
|
||||
FMOD_DSP_SetParameter(pitch, FMOD_DSP_PITCHSHIFT_PITCH, rapportPitch(inst[getInstrument(m,0,i)],getNote(m,0,i),4));
|
||||
FMOD_Channel_AddDSP(chan[chaine], pitch, 0); // C'est quoi chan1 ??? Je l'ai remplac<61> par chan[1], vu que chan1 est as d<>clar<61>...
|
||||
// On va passer une bonne journ<72>e...
|
||||
}
|
||||
@@ -140,7 +154,7 @@ void lecture (int nombreChaines, int tempo, Motif* melodie[]) {
|
||||
}
|
||||
|
||||
//On relache le syst<73>me FMOD
|
||||
for (int i = 0; i <= nombreChaines; i++) {
|
||||
for (int i = 0; i < nombreInst; i++) {
|
||||
FMOD_Sound_Release(sample[i]);
|
||||
}
|
||||
FMOD_System_Close(system);
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
#define _LECTURE_H
|
||||
|
||||
#include "../melodie/melodie.h"
|
||||
// #include "../instruments/instrument.h"
|
||||
#include "../instruments/instruments.h"
|
||||
// #include <SDL2/SDL.h>
|
||||
// #include <SDL2/SDL_mixer.h>
|
||||
#include <stdio.h>
|
||||
@@ -29,6 +29,6 @@
|
||||
@param[in] tempo : vitesse de lecture
|
||||
@param[in] melodie[] : tableau ordonné des motifs
|
||||
*/
|
||||
void lecture(int nbrChaines, int tempo, Motif* melodie[]);
|
||||
void lecture(int nbrChaines, int nombreInst, int tempo, Instrument* inst[], Motif* melodie[]);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user