6

我实际上并不精通 C++ 或 SDL_Mixer,但我还是代表 Doom 社区提出了这个问题。简而言之,编写 Doom 源端口的人似乎无法弄清楚如何在 Windows Vista 或 7 上使用 SDL_Mixer 独立控制正常音量和 MIDI 音量。我会让 Eternity Engine 的作者 James Haley 用他自己的话说:

似乎在 Windows Vista 或 7 下不存在本机 MIDI 独立音量的概念,因为在任何具有它们的应用程序(包括大多数使用 SDL_mixer 的游戏)中使用 MIDI 音量滑块也会影响数字声音输出的音量。这使得试图调整音乐的相对音量以获得舒适感是不可能的。

有没有人找到任何解决方法?鉴于微软似乎在整个操作系统中以任何方式分别控制单个声音设备的音量,我猜这不太可能。

我听说过各种涉及胆小的驱动程序的解决方法,但这需要用户超越简单地在他的系统上安装游戏。我所知道的唯一能彻底解决这个问题的端口是 ZDoom,但它使用了与 GPL 不兼容的 FModEx,因此不是一个合适的解决方案。

如果您想查看一些代码,Chocolate Doom 可能是最容易理解的 Doom 源代码端口,您可以在此处获取它的源代码。

也欢迎对其他开源声音和音乐库提出任何建议。

4

4 回答 4

1

一个解决方案是附带一个启用 FluidSynth 的 SDL_mixer。您还需要附带一个 SoundFont2 文件。幸运的是,那里有免费的 SF2,有些甚至针对 Doom 的 MIDI 文件进行了优化。许可证应该不是问题,因为 SoundFonts 是资产,而不是代码。

然后使用 Mix_SetSoundFonts() 加载 SF2。

于 2012-08-29T21:48:31.697 回答
0

我正在维护一个类似的游戏端口(Descent 2),我遇到了同样的问题。Afaik 在使用 SDL_mixer 时没有解决方案。我发现关闭midi音乐时避免声音静音的一种方法是检索临时midi设备的句柄,将midi音量设置为最大,然后再次关闭临时设备。

于 2011-12-02T16:30:50.890 回答
0

长期以来,我们发现的唯一解决方案是使用 PortMIDI 之类的东西。然而,以永恒引擎闻名的 Quasar 遇到了一个巧妙的解决方案:

http://www.doomworld.com/vb/showthread.php?s=&postid=1124981#post1124981

他本质上是将 SDL_Mixer 放入自己的进程中,并通过 RPC 对其进行控制。非常聪明。

于 2012-11-24T04:18:54.687 回答
0

您可能想查看 SDL 之外的不同 MIDI 库。

http://wildmidi.sourceforge.net/

http://sourceforge.net/apps/trac/fluidsynth/

http://timidity.sourceforge.net

于 2011-07-14T14:37:32.247 回答