[FMOD] Classe

Le côté programmation du développement d'un jeu vidéo.

Classe

Messagepar TrizoLakai » 02 Fév 2006, 13:00

Voila je me suis fais ceci pour mes jeux :

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 ;)
Avatar de l’utilisateur
TrizoLakai
Hello World, I'm new !
 
Messages: 337
Inscription: 27 Juil 2005, 15:01
Localisation: Nantes

Messagepar TrizoLakai » 04 Fév 2006, 20:43

Personne n'ai capable de me répondre ? Le code est surement trop long, ...
Mais ça serai super sympa de me guider un peu ! Est-ce mon code qui déconne ou FMOD qui ne veut pas de bruitage sur les canaux au dessus de 1 ?

Merci,
Avatar de l’utilisateur
TrizoLakai
Hello World, I'm new !
 
Messages: 337
Inscription: 27 Juil 2005, 15:01
Localisation: Nantes

Messagepar teto » 05 Fév 2006, 20:04

Tu peux pas utiliser FSOUND_FREE plutot que canal ?
Avatar de l’utilisateur
teto
 
Messages: 1168
Inscription: 26 Juil 2005, 19:02
Localisation: /home/Paris

Messagepar TrizoLakai » 23 Fév 2006, 14:09

J'ai refait des tests et ça fonctionne. En fait je crois qu'il faut initialiser AVANT d'appeller les constructeurs :00000020:

Merci de ton aide.

La Classe
Avatar de l’utilisateur
TrizoLakai
Hello World, I'm new !
 
Messages: 337
Inscription: 27 Juil 2005, 15:01
Localisation: Nantes


Retourner vers Programmation

Qui est en ligne

Utilisateurs parcourant ce forum: Google [Bot], Yahoo [Bot] et 15 invités

cron