2011-05-03 32 views
6

我其實不太熟悉C++或SDL_Mixer,但是我仍然代表Doom社區問這個問題。簡而言之,沒有人寫Doom源端口似乎可以找出如何使用Windows Vista或7上的SDL_Mixer獨立控制正常音量和MIDI音量。我會讓Eternity Engine的作者James Haley用他自己的話說出來:SDL_Mixer Windows Vista/7上的MIDI音量問題

似乎對本地MIDI獨立音量的概念,在Windows Vista或Windows 7不存在,因爲在具有它們(包括使用SDL_mixer大多數遊戲)的任何應用程序使用MIDI音量滑塊也影響體積數字聲音輸出。這使得嘗試調整音樂的相對音量以實現舒適是不可能的。

有沒有人發現這方面的任何解決方法?我猜這不太可能是因爲微軟似乎在整個操作系統中以任何方式分別控制單個音頻設備的音量。

我聽說過所有涉及Timidity驅動程序的各種解決方法,但這要求用戶不僅僅是在他的系統上安裝遊戲。我知道的唯一一個明確修復此問題的端口是ZDoom,但它使用GPL不兼容的FModEx,因此不是合適的解決方案。

如果你想要看一些代碼,巧克力末日也許是最簡單的末日來源港口grok,你可以抓住它的來源here

對其他開源聲音和音樂庫的任何建議也會受到歡迎。

+1

爲什麼不只是將現有的MIDI文件轉換爲WAV(或任何可以解壓縮到PCM流的文件格式)並管理音樂流就好像它是與您混合的任何其他聲音? – selbie 2011-05-03 04:16:19

+2

MIDI文件被嵌入。WAD數據文件,並且有成千上萬個用戶自制的.WAD數據文件,其中一些可追溯到1994年。事先做好轉換可能是不可能的。在程序本身中有Timidity ++和Fluidsynth,但我已經聽說過兩種情況下都不滿意轉換的抱怨。 – AlexMax 2011-05-03 05:21:28

回答

0

我保持了類似的遊戲端口(下降2),和我所遇到同樣的問題。 Afaik在使用SDL_mixer時沒有解決方案。當我關閉midi音樂時,爲了避免聲音被靜音,我找到了一個辦法,就是找回臨時midi設備的句柄,將midi音量設置爲max,然後再次關閉臨時設備。

1

一個解決方案是使用啓用FluidSynth的SDL_mixer。您還需要發送一個SoundFont2文件來與它一起使用。幸運的是,這裏有免費的SF2,有些甚至爲Doom的MIDI文件進行了優化。許可證不應該是一個問題,因爲SoundFonts是資產而不是代碼。

然後,您使用Mix_SetSoundFonts()加載SF2。