IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

[FMOD & SDL] Probleme de chargement de MP3


Sujet :

SDL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 128
    Points : 101
    Points
    101
    Par défaut [FMOD & SDL] Probleme de chargement de MP3
    hi tout le monde...
    Alors je suis en train de réaliser un petit jeu en C avec SDL et FMOD. Pour la partie musique, je souhaite lire plusieurs MP3. Pour cela, j'initialise un tableau qui contiendra tous les noms de mes différentes chansons... Jusque la rien de sorcier... Ce que je veux faire, c'est lire un le MP3 n°i et quand j'appuie sur une touche (dans mon cas pageUP ou pageDOWN), le programme arrete la lecture de ce dernier et lit le MP3 n°i+1.
    Mon probleme et que la lecture du 1er MP3, se fait sans probleme mais des que je veux en charger un autre a la place, FMOD plante

    Voila comment je m'y suis pris :
    Tout d'abord la partie initialisation de FMOD, je fais appel à cette fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int initFMOD( void ) {
        if( FSOUND_Init( 44100 , 32 , 0 ) == FALSE ) {
            printf( "Echec dans l'initialisation de FMOD : %s\n" , FSOUND_GetError() ) ;
        }   
    }
    Ensuite, au début de mon main, je charge le MP3 en faisant appel à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int chargeMP3( char *nomMP3 ) {
           if( !( monMP3 = FSOUND_Stream_Open( nomMP3, FSOUND_LOOP_NORMAL, 0 , 0)) ) {
            printf("Erreur dans le chargement du MP3 : %s\n",FSOUND_GetError() ) ;
                  return EXIT_FAILURE ;
        }
        return EXIT_SUCCESS ;    
    }
    Rmq : la variable monMP3 est globale et est de type : FSOUND_STREAM*.

    Et, je lance la lecture de la manirer suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int canalMP3 = FSOUND_Stream_Play( FSOUND_FREE , monMP3 ) ;
    Jusque la pas de probleme, mon MP3 est lu

    Maintenant, le prog détecte un évènement SDL (l'appui sur la touche SDLK_PGUP) et effectue le traitement suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    FSOUND_Stream_Stop(monMP3); /* J'arrete la lecture du MP3 courant */
    chargeMP3( "monDeuxiemeMP3.mp3" ) ; /* Je charge le nouveau MP3 */
    /* C'est la que ca plante !!! */
    canalMP3 = lectureMP3() ; /* Je relance la lecture du nouveau MP3 */
    Voila grosso modo, comment mon prgramme fonctionne... Je pense qu'il plante car j'arrete mal le 1er MP3 et qu'il essaye de charger le nouveau dans un espace mémoire déja occupé... Donc si quelqu'un peut m'aider ca me ferait plaisir...

    Merci d'avance

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 51
    Points : 32
    Points
    32
    Par défaut
    Ptite question; quand il plante, il te met l'erreur que tu as spécifié? ou plante-t-il comme un barbare ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 128
    Points : 101
    Points
    101
    Par défaut
    En fait, afin de situer ou le programme plante exactemement, j'ai mis des printf() a plusieurs endroits, c'est comme ca que j'ai vu qu'il plantait au nivo du chargement du second MP3 (c'est à dire à cause d'une fct FMOD)...
    Mais dans le fichier stderr généré par SDL, l'erreur suivante est invoqué :
    Fatal signal: Segmentation Fault (SDL Parachute Deployed)
    Comme je n'ai jamais compris cette erreur SDL je suis un peu dans le doute...
    Est-ce que c'est SDL qui plante ou FMOD !?

  4. #4
    Membre habitué Avatar de poussinphp
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 428
    Points : 176
    Points
    176
    Par défaut
    J'ai un doute concernant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int chargeMP3( char *nomMP3 ) {
           if( !( monMP3 = FSOUND_Stream_Open( nomMP3, FSOUND_LOOP_NORMAL, 0 , 0)) ) {
            printf("Erreur dans le chargement du MP3 : %s\n",FSOUND_GetError() ) ;
                  return EXIT_FAILURE ;
        }
        return EXIT_SUCCESS ;    
    }
    ......
    chargeMP3( "monDeuxiemeMP3.mp3" ) ;
    Ton [ "nomMP3" = "monDeuxiemeMP3.mp3" ] puis je voit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if( !( monMP3 = FSOUND_Stream_Open( nomMP3, FSOUND_LOOP_NORMAL, 0 , 0)) ) 
     
    Soit 
     
    if( !( "monDeuxiemeMP3.mp3" = FSOUND_Stream_Open( "monDeuxiemeMP3.mp3", FSOUND_LOOP_NORMAL, 0 , 0)) )
    Si je remplace donc --> EXIT_FAILURE

    Enfin, je pense que FSOUND_Stream_Open renvois un boolean ou un int mais pas le nom du fichier, non?

    As-tu essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if( !(FSOUND_Stream_Open( nomMP3, FSOUND_LOOP_NORMAL, 0 , 0)) )
    ??

  5. #5
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 369
    Points : 40 164
    Points
    40 164
    Par défaut
    Citation Envoyé par poussinphp
    Enfin, je pense que FSOUND_Stream_Open renvois un boolean ou un int mais pas le nom du fichier, non?
    attention, FSOUND_Stream_Open ne renvoie ni un booléen ni un int, mais un handle sur un morceau (un FSOUND_STREAM *)

    Citation Envoyé par georges_jung
    Ensuite, au début de mon main, je charge le MP3 en faisant appel à :
    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int chargeMP3( char *nomMP3 ) {
           if( !( monMP3 = FSOUND_Stream_Open( nomMP3, FSOUND_LOOP_NORMAL, 0 , 0)) ) {
            printf("Erreur dans le chargement du MP3 : %s\n",FSOUND_GetError() ) ;
                  return EXIT_FAILURE ;
        }
        return EXIT_SUCCESS ;    
    }
    Rmq : la variable monMP3 est globale et est de type : FSOUND_STREAM*.
    monMP3 est déclaré en char* ou alors tu as eu la bonne idée de prendre 2 variables qui ont le même nom.

    il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    FSOUND_STREAM* stream;
    int chargeMP3( char *nomMP3 ) {
       stream = FSOUND_Stream_Open( nomMP3, FSOUND_LOOP_NORMAL, 0 , 0);
       if(!stream) ...
    }
    donc, regarde bien si tu n'as pas de conflits de variables, une variable locale qui masque une globale

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Vous vous êtes tous fait avoir entre monMP3 et nomMP3
    Enfin c'est vrai qu'on a vu mieux comme noms...

    Citation Envoyé par georges_jung
    Rmq : la variable monMP3 est globale et est de type : FSOUND_STREAM*.

  7. #7
    Membre habitué Avatar de poussinphp
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 428
    Points : 176
    Points
    176
    Par défaut
    Bien joué

    J'avoue, je me suis bien fais avoir

    Faut dire aussi qu'entre "mon" et "nom" la différence visuelle est minime

    attention, FSOUND_Stream_Open ne renvoie ni un booléen ni un int, mais un handle sur un morceau (un FSOUND_STREAM *)
    Merci pour l'info

  8. #8
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 369
    Points : 40 164
    Points
    40 164
    Par défaut
    oui, je me suis aussi fait avoir

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 128
    Points : 101
    Points
    101
    Par défaut
    OK merci tout le monde, je vais essayer tout ca...

Discussions similaires

  1. [sqlloader]problèmes de chargement
    Par ssidki dans le forum Oracle
    Réponses: 6
    Dernier message: 26/07/2006, 18h36
  2. [SDL] probleme d'affichage
    Par .:dev:. dans le forum SDL
    Réponses: 2
    Dernier message: 26/07/2006, 16h33
  3. [ftp]Probleme de chargement ftp...
    Par doudoustephane dans le forum Internet
    Réponses: 4
    Dernier message: 05/05/2006, 00h47
  4. [ jboss ] probleme de chargement de jar
    Par felix79 dans le forum Wildfly/JBoss
    Réponses: 4
    Dernier message: 27/10/2004, 10h06
  5. [SLACKWARE] Problème de chargement
    Par booboo dans le forum Autres
    Réponses: 2
    Dernier message: 13/08/2004, 01h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo