【发布时间】:2011-05-03 02:58:48
【问题描述】:
我实际上并不精通 C++ 或 SDL_Mixer,但我还是代表 Doom 社区提出了这个问题。简而言之,编写 Doom 源端口的人似乎无法弄清楚如何在 Windows Vista 或 7 上使用 SDL_Mixer 独立控制正常音量和 MIDI 音量。我让 Eternity Engine 的作者 James Haley 用他自己的话来说吧:
在 Windows Vista 或 7 下似乎不存在本机 MIDI 独立音量的概念,因为在任何具有它们的应用程序(包括大多数使用 SDL_mixer 的游戏)中使用 MIDI 音量滑块也会影响数字声音输出的音量。这使得试图调整音乐的相对音量以获得舒适感是不可能的。
有没有人找到任何解决方法?鉴于微软似乎在整个操作系统中以任何方式分别控制单个声音设备的音量,我猜这不太可能。
我听说过各种涉及 Timidity 驱动程序的解决方法,但这需要用户超越简单地在他的系统上安装游戏。据我所知,唯一能彻底解决此问题的端口是 ZDoom,但它使用不兼容 GPL 的 FModEx,因此不是一个合适的解决方案。
如果您想查看一些代码,Chocolate Doom 可能是最容易理解的 Doom 源端口,您可以获取它的源代码 here。
也欢迎对其他开源声音和音乐库提出任何建议。
【问题讨论】:
-
为什么不将现有的 MIDI 文件转换为 WAV(或任何可以解压缩为 PCM 流的文件格式)并像管理其他声音一样管理音乐流?跨度>
-
MIDI文件嵌入在.WAD数据文件中,用户自制的.WAD数据文件数以万计,其中一些可以追溯到1994年。事先进行转换可能是出于这个问题。在程序本身中有 Timidity++ 和 Fluidsynth 可以做到这一点,但我听说在这两种情况下转换都不令人满意。
标签: c++ windows sdl midi sdl-mixer