- Code: Tout sélectionner
#include <iostream>
#include <FMOD/FMOD.h>
using namespace std;
class Son{
private:
int canal;
FSOUND_STREAM *Musique;
FSOUND_SAMPLE *Bruitage;
static void AffichageErreur(char *Erreur, bool FmoD);
public:
Son();
~Son();
static void StopAll(){FSOUND_Close();} // Arete tout les sons
static short int Init(int canaux, int taux = 44100){
if(char(1)!=FSOUND_Init(taux, canaux, 0))
AffichageErreur("Impossible d'Initialiser Fmod :", true);
}
void Play(); //Joue le son
void Stop(); //Arete le son
void Volume(int vol){FSOUND_SetVolume(canal, vol);} ; //Change le volume
int Load(char *SON, bool musique, int Chan); //Charge le son
};
Son::Son(){
canal = 0;
Musique = NULL;
Bruitage = NULL;
}
Son::~Son(){
if(Musique != NULL) FSOUND_Stream_Close(Musique);
else if(Bruitage != NULL) FSOUND_Sample_Free(Bruitage);
}
void Son::Play(){
if(Musique != NULL) FSOUND_Stream_Play(canal, Musique);
else if(Bruitage != NULL) FSOUND_PlaySound(canal, Bruitage);
}
void Son::Stop(){
if(Musique != NULL) FSOUND_Stream_Stop(Musique);
else if(Bruitage != NULL) FSOUND_StopSound(canal);
}
int Son::Load(char *SON, bool musique, int Chan){
canal = Chan;
if(musique)Musique = FSOUND_Stream_Open(SON, FSOUND_LOOP_NORMAL, 0, 0);
else Bruitage = FSOUND_Sample_Load(FSOUND_FREE, SON, canal, 0, 0);
if(Musique == NULL && Bruitage == NULL) AffichageErreur("Erreur Chargement :", true);
}
void Son::AffichageErreur(char *Erreur, bool FmoD){
cerr << Erreur << endl;
if(FmoD)cerr << FSOUND_GetError() <<endl;
}
int main(int argc, char *argv[]){
Son Bruitage, Musique;
/* Initialisation */
Son::Init(4);
/* Chargement */
Bruitage.Load("./Bruitage.wav", false, 1); //Marche pour 0 ou 1
Musique.Load("./Musique.wav", true, 3); //OK pour tout
/* Lecture */
Musique.Play(); //OK
Bruitage.Play();
system("Pause");
return 0;
}
Mais comme vous pouvez le remarquer : si je joue mes Bruitages sur un cannal au dessus de 1, ils sont répétés comme pour une musique. Je ne comprend pas pouquoi, Et je vous demande conseil.
Merci,
ps : si vous savez aussi pourquoi les sons sont joué 15 plombs après l'apel
