Проблемы с громкостью MIDI-тома в SDL_Mixer в Windows Vista / 7 - PullRequest
6 голосов
/ 03 мая 2011

Я не очень хорошо разбираюсь в C ++ или SDL_Mixer, но я все равно задаю этот вопрос от имени сообщества Doom. Проще говоря, никто, пишущий исходные порты Doom, не может понять, как управлять нормальной громкостью звука и громкостью звука MIDI независимо, используя SDL_Mixer в Windows Vista или 7. Я позволю Джеймсу Хейли, автору Eternity Engine, написать это своими словами. :

Кажется, что концепция независимой громкости для родного MIDI не существует в Windows Vista или 7, поскольку использование ползунков громкости MIDI в любом приложении, в котором они есть (включая большинство игр, использующих SDL_mixer), также влияет на громкость вывода цифрового звука. Это делает попытку отрегулировать относительную громкость музыки для комфорта невозможной.

Кто-нибудь нашел обходные пути для этого? Я предполагаю, что это вряд ли, учитывая, что Microsoft, похоже, экономит на всей ОС, чтобы контролировать громкость отдельных звуковых устройств по отдельности.

Я слышал о различных обходных путях, связанных с драйвером Timidity, но это требует от пользователя не только простой установки игры в своей системе. Единственный известный мне порт, который решает эту проблему, - это ZDoom, но он использует FModEx, несовместимый с GPL, и поэтому не является подходящим решением.

Если вы хотите, чтобы какой-то код просматривал, Chocolate Doom, пожалуй, самый простой исходный порт Doom для поиска, и вы можете взять его источник здесь .

Приветствуются любые предложения по другим библиотекам звука и музыки с открытым исходным кодом.

Ответы [ 4 ]

1 голос
/ 30 августа 2012

Решением будет поставка с SDL_mixer с поддержкой FluidSynth. Вы также должны были бы отправить файл SoundFont2, чтобы пойти с ним. К счастью, есть бесплатные SF2, а некоторые даже оптимизированы для MIDI-файлов Doom. Лицензии не должны быть проблемой, поскольку SoundFonts - это ресурсы, а не код.

Затем вы загружаете SF2 с помощью Mix_SetSoundFonts ().

0 голосов
/ 24 ноября 2012

Долгое время единственным решением, которое мы нашли, было использование чего-то вроде PortMIDI. Однако слава Quasar of Eternity Engine нашла изящное решение:

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

Он, по сути, помещает SDL_Mixer в свой собственный процесс и управляет им с помощью RPC. Очень умный.

0 голосов
/ 02 декабря 2011

Я поддерживаю аналогичный игровой порт (Descent 2), и я столкнулся с той же проблемой. Afaik нет решения для этого при использовании SDL_mixer. Чтобы избежать приглушения звука при выключении миди-музыки, которую я обнаружил, нужно извлечь дескриптор временного миди-устройства, установить миди-громкость на максимум, а затем снова закрыть временное устройство.

0 голосов
/ 14 июля 2011

Возможно, вы захотите взглянуть на различные библиотеки MIDI вне SDL.

http://wildmidi.sourceforge.net/

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

http://timidity.sourceforge.net

...