2011-05-03 34 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。