实际上,我对C++或SDL_Mixer并不熟悉,但我还是代表Doom社区提出了这个问题。简单地说,在Windows或7上使用SDL_Mixer编写Doom源端口似乎没有人知道如何独立地控制正常的声量和MIDI声量。我要让“永恒引擎”的作者James用他自己的话说:
似乎在Windows或7下不存在本地MIDI独立音量的概念,因为在任何有MIDI音量滑块的应用程序(包括大多数使用SDL_mixer的游戏)中使用MIDI音量滑块也会影响数字声音输出的音量。这使得试图调整音乐的相对音量以获得舒适感是不可能的。 有人找到解决办法了吗?我猜这是不太可能的,因为微软似乎已经在整个操作系统上的任何方式,以控制单独的声音设备的音量。
我听说过各种各样的解决办法我所知道的唯一确切地解决这个问题的端口是ZDoom,但是它使用的是GPL不兼容的FModEx,因此不是一个合适的解决方案。
如果您想要查看一些代码,那么Chocolate可能是最简单的Doom源端口,您可以获取它的源这里。
欢迎对其他开源声音和音乐库提出任何建议。
发布于 2012-08-29 21:48:31
一个解决方案是附带一个支持FluidSynth的SDL_mixer。您还需要发布一个SoundFont2文件才能与它一起运行。幸运的是,有免费的SF2存在,有些甚至为Doom的MIDI文件进行了优化。许可证不应该是一个问题,因为SoundFonts是资产,而不是代码。
然后使用SF2 ()加载Mix_SetSoundFonts。
发布于 2011-07-14 14:37:32
您可能需要查看SDL之外的不同MIDI库。
http://wildmidi.sourceforge.net/
http://sourceforge.net/apps/trac/fluidsynth/
http://timidity.sourceforge.net
发布于 2011-12-02 16:30:50
我正在维护一个类似的游戏端口(下降2),我也遇到了同样的问题。在使用SDL_mixer时,Afaik没有解决方案。当我发现关闭midi音乐时,避免声音被静音的一种解决方法是检索一个临时midi设备的手柄,将midi音量设置为最大值,然后再次关闭临时设备。
https://stackoverflow.com/questions/5864603
复制相似问题