2014-07-18 52 views
2

對於一些非常奇怪的原因,SDL_mixer完全沒有聲音播放。我已經嘗試了一切:重新安裝庫,檢查音樂是否實際可播放,使用Mix_FadeInMusic和Mix_FadeOutMusic,絕對沒有AVAIL。它告訴我音樂正在加載,它告訴我它正在播放。我使用的是Windows 8.1的64位與VC 2013年使用SDL_mixer時沒有聲音

代碼:

SDL_Init(SDL_INIT_EVERYTHING); 
// Create window 

Mix_Init(MIX_INIT_MP3 | MIX_INIT_OGG | MIX_INIT_FLAC | MIX_INIT_FLUIDSYNTH | MIX_INIT_MOD | MIX_INIT_MODPLUG); 

if (Mix_OpenAudio(22050, MIX_DEFAULT_FORMAT, 2, 4096)) { 
    printf("Unable to open audio!\n"); 
    ovr_Shutdown(); 
    SDL_Quit(); 
    exit(1); 
} 

music = Mix_LoadMUS(tmpLoc); 
if (music == NULL) SDL_ShowSimpleMessageBox(NULL, "", "Music is null", window); 
Mix_PlayMusic(music, -1,1000); 
if (!Mix_PlayingMusic()) SDL_ShowSimpleMessageBox(NULL, "", "No music playing", window); 

// OpenGL stuff 
while (quit == false) 
{ 
    // Loop 
} 
Mix_HaltMusic(); 
Mix_FreeMusic(music); 
Mix_CloseAudio(); 
Mix_Quit(); 
SDL_DestroyWindow(window); 
SDL_Quit(); 
return 0; 

回答

0

出人意料的是,SDL需要在Windows下的環境變量(具有最初被定位於Linux的工件),以實際輸出音頻。

嘗試設置SDL_AUDIODRIVER = waveout(或者您可以使用= dsound)。或者,您可以在調用SDL_Init()之後立即調用SDL_AudioInit(「waveout」)或SDL_AudioInit(「dsound」)。 (爲了高效,您可以將標誌參數修改爲SDL_Init()以指定除音頻外的所有音頻)。

SDL_AudioInit()被作者評論爲「內部」api。在庫中的其他地方,它被調用...猜猜看是什麼...使用從環境變量中獲取的字符串初始化音頻。

我在使用ffmpeg的ffplay時遇到了這個問題,它依賴(靜態鏈接的)SDL輸出音頻(除非我手動設置env變量,否則輸出音頻時輸出音頻失敗)。

我推測,SDL作者有一些默認是明智的Linux下反而使得在Windows下一個天翻地覆:

像你(和ffplay)沒有錯誤

客戶端代碼返回,也不例外,只是SDL高興地推音頻進入虛空。