ncurses+;SLD2和SDL2_混音器:尝试播放mp3时没有声音 我正在编写一个C++程序,使用NCURESS库,还播放声音效果。构建编译时,没有声音

ncurses+;SLD2和SDL2_混音器:尝试播放mp3时没有声音 我正在编写一个C++程序,使用NCURESS库,还播放声音效果。构建编译时,没有声音,c++,audio,sdl,mp3,C++,Audio,Sdl,Mp3,我已经在IDE项目中安装并添加了SDL2和SDL2_混合框架(我使用的是Xcode)。我还将mp3文件添加到与其他项目文件相同的目录中。这是我的密码: #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

我已经在IDE项目中安装并添加了SDL2和SDL2_混合框架(我使用的是Xcode)。我还将mp3文件添加到与其他项目文件相同的目录中。这是我的密码:

#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;
}
#包括
#包括
#如果已定义(WIN32)
#包括“curses.h”
#否则
#包括
#恩迪夫
...
int main(int argc,char*argv[]){
混合音乐*音乐;
//初始化音乐。
中频(SDL_初始化(SDL_初始化音频)<0){
fprintf(stderr,“无法初始化SDL\n”);
退出(退出失败);
}
if(Mix_Init(Mix_Init_MP3)!=Mix_Init_MP3){
fprintf(stderr,“无法初始化SDL_混合器”\n);
退出(退出失败);
}
if(Mix_OpenAudio(Mix_DEFAULT_FREQUENCY,Mix_DEFAULT_FORMAT,2,1024)!=0){
fprintf(stderr,“无法初始化音频”\n);
退出(退出失败);
}
Mix_AllocateChannels(1);//只需要背景音乐
音乐=Mix_LoadMUS(“sound.mp3”);
国际单项体育联合会(音乐){
混合播放音乐(音乐,-1);
}
...
混合哈尔特音乐();
混合音乐(音乐);
混音;
Mix_Quit();
返回0;
}

构建成功编译,我转到终端并打开我的项目,然后。。。没有声音!?我做错了什么?

原来需要的是音乐文件的绝对路径:

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

更新:我的“sound.mp3”文件似乎加载不正确。也许我在main()中没有正确引用它?它与项目中的其他文件位于同一目录中。
SDL\u GetError
告诉您什么?无论文件是否在“相同”目录中,进程都有其“当前工作目录”,并根据它解析相对路径。若您还并没有更改工作目录,那个么它将由父进程传递。如果你不确定的话,你可以去查一下。谢谢你,凯尔塔。SDL_GetError告诉我:“无法打开‘sound.mp3’。”在我进行getcwd查询后,它告诉我我的工作目录是:/private/tmp。(因为我在运行ncurses,所以我必须为项目的构建分配一个临时目录,该目录是:/tmp。)知道问题出在哪里吗?也许只是不认识这个文件??