2012-05-05 94 views
4

我正在使用使用SDL/SDL_Mixer播放wav文件的C++應用程序。我一直在Mac上開發應用程序沒有太大問題。不過,我確實需要這個應用程序才能在Linux上工作,所以我把Ubuntu的12.04 LTS放到了我的Windows 7機器上。編譯工作正常,直到我真正嘗試初始化系統。然後,SDL_Mixer給出錯誤「沒有可用的音頻設備」。正在初始化SDL_Mixer給出錯誤「No available audio device」

這裏就是引發錯誤的代碼:

using namespace std; 

void simple_sound_init() { 
    if (SDL_Init(SDL_INIT_AUDIO) == -1) { 
     fprintf(stderr, "init SDL error: %s\n", SDL_GetError()); 
     SDL_Quit(); 
     exit(1); 
    } 

    if (Mix_OpenAudio(SOUNDSAMPLERATE, MIX_DEFAULT_FORMAT, 1, 1024) != 0) { 
     fprintf(stderr, "initialize audio error: %s\n", Mix_GetError()); 
     Mix_CloseAudio(); 
     SDL_Quit(); 
     exit(1); 
    } 

    Mix_ChannelFinished(simple_sound_channel_finised); 
} 

確切的錯誤我得到的是:

initialize audio error: No available audio device 

P/S:我已搜查廣泛的在線解決方案和我已經嘗試檢查庫安裝等。但是,由於我可能錯過了某些內容,歡迎任何基本的圖書館建議,並且我會確認我已經設置了它們。

+0

也許你沒有正確設置你的虛擬盒 –

+0

關於我如何設置它不正確的任何建議?聲音工作正常(當然除此之外)與所有其他程序和Guest Additions已安裝。 –

回答

2

我在相同的情況下得到了完全相同的問題,但是使用ubuntu 14.04LTS(虛擬機箱,W7作爲主機)。但問題不在於VM配置(聲音與其他ubuntu應用程序正常工作)。

我在那裏發現了答案: http://forums.libsdl.org/viewtopic.php?t=7609&sid=40fdb9756b8e22e1b8253cda3338845f

感謝瑞安C.戈登誰寫的:

「如果你建立你自己的SDL,你可能沒有開發頭 爲的PulseAudio(或ALSA),所以它試圖使用/ dev/dsp,在許多現代Linux系統上都不存在 (因此,SDL_Init(SDL_INIT_AUDIO) 成功,但是當您嘗試打開SDL_Init時找不到設備)。 -get install libasound2-dev libpulse-dev「並重建SDL ...讓配置 腳本找到新的標題,因此它包含了PulseAudio和ALSA支持。「

我已經從源碼有效構建了SDL和SDL混音器,但沒有來自pulseAudio或ALSA的任何頭文件。安裝提及並重新編譯SDL和SDL_mixer(v1.2)的庫之後,聲音工作正常。

如果問題仍然存在,他還談到了另一種解決方案:

「如果你沒有建立自己的SDL,也許你可以強制使用 不同的音頻路徑: SDL_AUDIODRIVER =脈衝./mytestprogram 或 SDL_AUDIODRIVER = ALSA ./mytestprogram」

我沒有嘗試,作爲第一個解決方案是一個很好的在我的情況。