簡體   English   中英

使用SDL_mixer時無聲音

[英]No sound when using SDL_mixer

出於某些非常奇怪的原因,SDL_mixer絕對不會播放聲音。 我已經嘗試了所有方法:重新安裝該庫,使用Mix_FadeInMusic和Mix_FadeOutMusic檢查音樂是否真的可以播放,絕對沒有可用。 它告訴我音樂正在加載,並且告訴我正在播放。 我在VC 2013中使用Windows 8.1 64位。

碼:

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;

出乎意料的是,SDL需要Windows下的環境變量(最初是針對Linux的工件)才能實際輸出音頻。

嘗試設置SDL_AUDIODRIVER = waveout(或者您可以使用= dsound)。

或者,您可以在調用SDL_Init()之后立即調用SDL_AudioInit(“ waveout”)或SDL_AudioInit(“ dsound”)。 (為提高效率,您可以將SDL_Init()的flags參數修改為指定all-but-audio)。

作者將SDL_AudioInit()注釋為“內部” api。 在庫中的其他地方,它被稱為...猜測什么...使用從環境變量獲取的字符串初始化音頻。

我在使用ffmpeg的ffplay時遇到了此問題,該ffplay依靠(靜態鏈接的)SDL來輸出音頻(然后除非您手動設置env變量,否則它將無法輸出音頻)。

我推測SDL作者有一些默認設置,在Linux下是明智的,但在Windows下卻是明智之舉:

像您這樣的客戶端代碼(和ffplay)不會返回任何錯誤,也不會出現異常,只是SDL樂於將音頻輸出到空白處。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM