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 :

N'arrive pas a lire du mp3


Sujet :

SDL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 11
    Points : 6
    Points
    6
    Par défaut N'arrive pas a lire du mp3
    Bonjour, je suis sous Windows VC6 ( 80 ouai je sais....) et je n arrive pas a lire du mp3 avec SDL_Mixer

    en initialisant SDL,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if (SDL_Init(SDL_INIT_AUDIO) != 0) 
    	{
    		fprintf(stderr, "Unable to initialize SDL: %s\n", SDL_GetError());
    		return 1;
    	}
     
     
     
    	if(Mix_OpenAudio(audio_rate, audio_format, audio_channels, audio_buffers) != 0) 
    	{
    		fprintf(stderr, "Unable to initialize audio: %s\n", Mix_GetError());
    		system("pause");
    		exit(1);
    	}
    en chargeant le fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	m_mixMusic = Mix_LoadMUS(m_fullPath->c_str());
    puis en jouant le morceau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	while (Mix_PlayingMusic()==1)
    	{ 
     
    		if(Mix_PlayMusic(m_mixMusic, -1)==-1) 
    		{
    		printf("Mix_PlayMusic: %s\n", Mix_GetError());	
    		}
     
    		SDL_Delay(100);
    	}
    jarrive a jouer des Wav mais pas des mp3 (ni des ogg d ailleurs). Je precise que le dll smpeg est bien present dans mon fichier et que c est la fonction "Mix_LoadMUS" qui ne marche pas pour les mp3.
    Comment ca se fait ???

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par lio_on_jb_groove
    Bonjour, je suis sous Windows VC6 ( 80 ouai je sais....) et je n arrive pas a lire du mp3 avec SDL_Mixer

    en initialisant SDL,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if (SDL_Init(SDL_INIT_AUDIO) != 0) 
    	{
    		fprintf(stderr, "Unable to initialize SDL: %s\n", SDL_GetError());
    		return 1;
    	}
     
     
     
    	if(Mix_OpenAudio(audio_rate, audio_format, audio_channels, audio_buffers) != 0) 
    	{
    		fprintf(stderr, "Unable to initialize audio: %s\n", Mix_GetError());
    		system("pause");
    		exit(1);
    	}
    en chargeant le fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	m_mixMusic = Mix_LoadMUS(m_fullPath->c_str());
    puis en jouant le morceau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	while (Mix_PlayingMusic()==1)
    	{ 
     
    		if(Mix_PlayMusic(m_mixMusic, -1)==-1) 
    		{
    		printf("Mix_PlayMusic: %s\n", Mix_GetError());	
    		}
     
    		SDL_Delay(100);
    	}
    jarrive a jouer des Wav mais pas des mp3 (ni des ogg d ailleurs). Je precise que le dll smpeg est bien present dans mon fichier et que c est la fonction "Mix_LoadMUS" qui ne marche pas pour les mp3.
    Comment ca se fait ???
    En principe, c'est plutôt un problème d'installation du système et des bonnes bibliothèques...

    - Es-tu sûr que ta la bonne dll et que le système sait où le trouver ?

    - Serait-ce possible d'avoir un code minimal, compilable qui présente le problème ?

    Jc

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Merci d avoir repondu si vite. Voici un code qui fonctionne avec un wave pas avec un mp3. le probleme c toujours cette fonction loadMus qui ne marche pas.
    Au fait le delay doit dependre de la longueur du fichier qu on lit non ?



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    int main(int argc, char* argv[])
    {
     
     
    	std::string file2 =  std::string("1.wav");
    	int audio_rate = 44100 ;//??
    	Uint16 audio_format = AUDIO_S16SYS;
    	int audio_channels = 2;
    	int audio_buffers = 2048;
     
     
     
    	//std::string filemp3 =  std::string("06 - OMAR - Your Mess.mp3");
     
    	//SDL Initialize
    	if (SDL_Init(SDL_INIT_AUDIO) != 0) 
    	{
    		fprintf(stderr, "Unable to initialize SDL: %s\n", SDL_GetError());
    		return 1;
    	}
     
     
     
    	if(Mix_OpenAudio(audio_rate, audio_format, audio_channels, audio_buffers) != 0) 
    	{
    		fprintf(stderr, "Unable to initialize audio: %s\n", Mix_GetError());
    		system("pause");
    		exit(1);
    	}
     
     
     
    	Mix_QuerySpec(&audio_rate, &audio_format, &audio_channels);
     
    		Mix_Music* m_mixMusic; 
    		m_mixMusic = Mix_LoadMUS(file2.c_str());
    		Mix_PlayMusic(m_mixMusic, -1);
     
    		while (Mix_PlayingMusic()==1)
    			{ 
     
    				if(Mix_PlayMusic(m_mixMusic, -1)==-1) 
    				{
    				printf("Mix_PlayMusic: %s\n", Mix_GetError());	
    				}
     
    		SDL_Delay(500);
    	}
     
     
     
     
    	Mix_CloseAudio();
    	SDL_Quit();
     
     
    	return 0;
    }

  4. #4
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    J'aurais une tendance à corriger un peu ton code parce qu'il y a quelques trucs que je trouve un peu moche...

    - Mélange entre C et C++...
    - Pas de PollEvent dans la boucle globale
    - Appel à Mix_QuerySpec qui ne sert pas...

    Plus grave, dans ta boucle, tu rappelles Mix_PlayMusic et cela recommence la lecture du son (sauf si j'ai vraiment rien compris), pas étonnant que ton programme ne fonctionne pas...

    Voici un code qui fonctionne chez moi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    #include <SDL.h>
    #include <SDL_thread.h>
    #include <SDL_mixer.h>
     
    #include <stdlib.h>
    #include <string>
    #include <iostream>
     
    int main(int argc, char* argv[])
    {
        std::string file2 =  std::string("06 - OMAR - Your Mess.mp3");
        int done=0;
     
        SDL_Event e;
     
        //SDL Initialize
        if (SDL_Init(SDL_INIT_AUDIO) != 0) 
        {
            fprintf(stderr, "Unable to initialize SDL: %s\n", SDL_GetError());
            return 1;
        }
     
        if(Mix_OpenAudio(44100,MIX_DEFAULT_FORMAT,2,512)<0)
        {
            std::cerr << "Unable to initialize audio: " << Mix_GetError() << std::endl;
            Mix_CloseAudio();
            SDL_Quit();
            return EXIT_FAILURE;
        }
     
        Mix_Music* m_mixMusic; 
        m_mixMusic = Mix_LoadMUS(file2.c_str());
        Mix_PlayMusic(m_mixMusic, 1);
        Mix_VolumeMusic(SDL_MIX_MAXVOLUME);
     
        while ((Mix_PlayingMusic()==1)&&(done==0))
        { 
            while(SDL_PollEvent(&e))
            {
                switch(e.type)
                {
                    case SDL_QUIT:
                        done=1;
                        break;
                    default:
                        break;
                }
     
            }
     
        }
     
     
        Mix_CloseAudio();
        SDL_Quit();
     
        return 0;
    }

    Par contre, si ton problème est juste lié aux mp3, j'aurais une tendance à dire que cela doit être dû à des dlls qui ne sont pas bien placés...

    Jc

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Merci pour ta reponse et tes tuyaux. Effectivement ca ne marche pas chez moi ca doit etre du a des dll mal places, soit mes ddl ne sont pas bon pourtant je les ai trouve dans SDL Mixer.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    En plus si je prends ton exemple, si je settea -1 lors du play, je n ai pas de boucle. c est pareil chez toi ?

  7. #7
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par lio_on_jb_groove
    Merci pour ta reponse et tes tuyaux. Effectivement ca ne marche pas chez moi ca doit etre du a des dll mal places, soit mes ddl ne sont pas bon pourtant je les ai trouve dans SDL Mixer.
    Normalement, je pense qu'il faut mettre les dll dans le répertoire System32 ou alors dans le répertoire contenant l'exécutable (si tu es dans VS, copie le dans le répertoire de base et le répertoire Debug, je ne sais jamais lequel il regarde...)

    Vérifie ta variable d'environnement PATH aussi...

    En plus si je prends ton exemple, si je settea -1 lors du play, je n ai pas de boucle. c est pareil chez toi ?
    [EDIT]
    Hmm, faut changer la condition dans le while pour que tu puisses boucler.

    Et il faudrait ajouter un SDL_Delay(0) dans la boucle pour qu'elle permette de redonner la main au système (sous Linux) (ou utiliser SDL_gfx pour gérer le taux de rafraîchissement)...

    [/EDIT]

    Jc

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Merci en fait j ai mis mes dll dans system windows ca a marche ^-^.
    Par contre pour boucle ca me fait halluciner, a quoi ca sert de mettre -1 dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Mix_PlayMusic(m_mixMusic, -1);
    . En mettant un delay dans le while ca faait que se repeter. Au final je arrive pas du tout a comprendre quand exatement le fichier se joue. Dans la doc rien sur cela c quand assez hallucinant!!!!

  9. #9
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par lio_on_jb_groove
    Merci en fait j ai mis mes dll dans system windows ca a marche ^-^.
    Par contre pour boucle ca me fait halluciner, a quoi ca sert de mettre -1 dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Mix_PlayMusic(m_mixMusic, -1);
    . En mettant un delay dans le while ca faait que se repeter. Au final je arrive pas du tout a comprendre quand exatement le fichier se joue. Dans la doc rien sur cela c quand assez hallucinant!!!!
    Dans ce code, la chanson boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    #include <SDL.h>
    #include <SDL_thread.h>
    #include <SDL_mixer.h>
     
    #include <stdlib.h>
    #include <string>
    #include <iostream>
     
    int main(int argc, char* argv[])
    {
        std::string file2 =  std::string(argv[1]);
        int done=0;
     
        SDL_Event e;
     
        //SDL Initialize
        if (SDL_Init(SDL_INIT_AUDIO) != 0) 
        {
            fprintf(stderr, "Unable to initialize SDL: %s\n", SDL_GetError());
            return 1;
        }
     
        if(Mix_OpenAudio(44100,MIX_DEFAULT_FORMAT,2,512)<0)
        {
            std::cerr << "Unable to initialize audio: " << Mix_GetError() << std::endl;
            Mix_CloseAudio();
            SDL_Quit();
            return EXIT_FAILURE;
        }
     
        Mix_Music* m_mixMusic; 
        m_mixMusic = Mix_LoadMUS(file2.c_str());
        Mix_PlayMusic(m_mixMusic, -1);
        Mix_VolumeMusic(SDL_MIX_MAXVOLUME);
     
        while (done==0)
        { 
            while(SDL_PollEvent(&e))
            {
                switch(e.type)
                {
                    case SDL_QUIT:
                        done=1;
                        break;
                    default:
                        break;
                }
     
            }
     
     	SDL_Delay(1);
        }
     
     
        Mix_CloseAudio();
        SDL_Quit();
     
        return 0;
    }
    Jc

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Merci encore pout ta réponse, ce while va me prendre la tête je crois .
    Vais être obligé de multi threader.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/11/2012, 09h27
  2. je n'arrive pas à lire un fichier wav
    Par _vince_ dans le forum Général Python
    Réponses: 4
    Dernier message: 02/10/2010, 14h57
  3. Réponses: 1
    Dernier message: 07/06/2010, 10h23
  4. Je n'arrive pas à lire un fichier
    Par majudis dans le forum Débuter
    Réponses: 7
    Dernier message: 07/04/2010, 22h16
  5. N'arrive pas à lire une partition vista avec XP
    Par farenheiit dans le forum Windows Vista
    Réponses: 13
    Dernier message: 28/04/2007, 22h49

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