2017-05-08 4 views
0

J'écris un programme en C++ qui utilise la bibliothèque ncurses et qui joue aussi des effets sonores. Pendant que la compilation compile, il n'y a pas de son.ncurses + SLD2 et SDL2_Mixer: Pas de son lors de la tentative de lecture mp3

J'ai installé et ajouté les frameworks SDL2 et SDL2_Mixer à mon projet IDE (j'utilise Xcode). J'ai également ajouté le fichier mp3 dans le même répertoire que mes autres fichiers de projet. Voici mon code:

#include <SDL2/SDL.h> 
#include <SDL2_Mixer/SDL_Mixer.h> 
#if defined(WIN32) 
#include "curses.h" 
#else 
#include <curses.h> 
#endif 
... 
int main(int argc, char * argv[]) { 
Mix_Music *music; 

// Initialize music. 
if (SDL_Init(SDL_INIT_AUDIO) < 0) { 
    fprintf(stderr, "unable to initialize SDL\n"); 
    exit(EXIT_FAILURE); 
} 
if (Mix_Init(MIX_INIT_MP3) != MIX_INIT_MP3) { 
    fprintf(stderr, "unable to initialize SDL_mixer\n"); 
    exit(EXIT_FAILURE); 
} 
if (Mix_OpenAudio(MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT, 2, 1024) != 0) { 
    fprintf(stderr, "unable to initialize audio\n"); 
    exit(EXIT_FAILURE); 
} 
Mix_AllocateChannels(1); // only need background music 
music = Mix_LoadMUS("sound.mp3"); 
if (music) { 
    Mix_PlayMusic(music, -1); 
} 
... 
Mix_HaltMusic(); 
Mix_FreeMusic(music); 
Mix_CloseAudio(); 
Mix_Quit(); 


return 0; 
} 

La construction compile avec succès, je vais au terminal et ouvrir mon projet, puis ... pas de son !? Qu'est-ce que je fais mal?

+0

Mise à jour: il semble que mon fichier « son.mp3 » ne se charge pas correctement. Peut-être que je ne le référence pas correctement dans mon principal()? Il se trouve dans le même répertoire que les autres fichiers du projet. – shopofolive

+1

Qu'est-ce que 'SDL_GetError' vous dit? Peu importe si le fichier se trouve dans le répertoire 'same', le processus a son 'répertoire de travail actuel' et les chemins relatifs sont résolus par rapport à celui-ci. Si vous n'avez pas changé de répertoire de travail, il est passé par le processus parent. Vous pouvez le vérifier avec [getcwd] (https://linux.die.net/man/3/getcwd) si vous n'êtes pas sûr. – keltar

+0

Merci, keltar. SDL_GetError me dit: "Impossible d'ouvrir 'sound.mp3'." Après avoir fait une requête getcwd, cela m'indique que mon répertoire de travail est:/private/tmp. (Puisque je cours ncurses, j'ai dû allouer un répertoire temporaire pour la construction du projet, et ce répertoire est:/tmp.) N'importe quelle idée quel est le problème? Peut-être que c'est juste ne pas reconnaître le fichier ?? – shopofolive

Répondre

0

Il est apparu que ce qui était nécessaire était un chemin absolu du fichier musical:

Mix_AllocateChannels(1); 
music = Mix_LoadMUS("/.../sound.mp3"); 
if (music) { 
Mix_PlayMusic(music, -1); 
}