2011-05-03 16 views
6

realidad no soy muy versado en C++ o SDL_mixer, pero estoy haciendo esta pregunta en nombre de todos modos en la comunidad de Doom. En pocas palabras, nadie que escriba puertos de origen Doom puede entender cómo controlar el volumen de sonido normal y el volumen de sonido MIDI de forma independiente usando SDL_Mixer en Windows Vista o 7. Dejaré que James Haley, autor de Eternity Engine, lo exprese con sus propias palabras :SDL_mixer MIDI cuestiones de volumen en Windows Vista/7

parece que el concepto de volumen independientes para MIDI nativo no existe en Windows Vista o 7, como el uso de reguladores de volumen MIDI en cualquier aplicación que ellos (incluyendo la mayoría de los juegos que utilizan SDL_mixer) tiene también afecta al volumen de salida de sonido digital. Esto hace que sea imposible ajustar el volumen relativo de la música para comodidad.

¿Alguien ha encontrado alguna solución para esto? Supongo que es poco probable dado que Microsoft parece haber escatimado en todo el sistema operativo en cualquier forma de controlar el volumen de los dispositivos de sonido individuales por separado.

He oído hablar de todos los involucra a un conductor timidez diversas soluciones, pero esto requiere que el usuario vaya más allá de la simple instalación del juego en su sistema. El único puerto que conozco que definitivamente soluciona este problema es ZDoom, pero usa el FModEx incompatible con GPL y, por lo tanto, no es una solución adecuada.

Si desea ver un código, Chocolate Doom es quizás el puerto de origen de Doom más fácil de asimilar y puede obtener su fuente here.

Cualquier sugerencia en otras bibliotecas de sonido de código abierto y de la música serían bien recibidos también.

+1

¿Por qué no convertir los archivos MIDI a WAV existentes (o cualquier formato de archivo que puede descomprimir a un flujo PCM) y gestionar el flujo de la música como si se tratara de cualquier otro sonido que se mezcla con? – selbie

+2

Los archivos MIDI están incrustados en.Archivos de datos WAD, y hay decenas de miles de archivos de datos .WAD creados por el usuario, algunos de los cuales datan de 1994. Hacer una conversión de antemano probablemente esté fuera de discusión. Hay Timidity ++ y Fluidsynth para hacerlo en el programa mismo, pero he escuchado quejas sobre conversiones no satisfactorias en ambos casos. – AlexMax

Respuesta

0

estoy manteniendo un puerto de juego similar (Descent 2), y me he encontrado con el mismo problema. Afaik no tiene solución cuando usa SDL_mixer. Una cura para evitar que se silencie el sonido al desactivar la música midi que he encontrado es recuperar un control de un dispositivo midi temporal, establecer el volumen midi al máximo y luego cerrar el dispositivo temporal nuevamente.

1

Una solución sería enviar con un SDL_mixer FluidSynth habilitado. También necesitaría enviar un archivo SoundFont2 para que lo acompañe. Afortunadamente, hay SF2 gratuitos y algunos incluso están optimizados para los archivos MIDI de Doom. Las licencias no deberían ser un problema, ya que SoundFonts son activos, no códigos.

A continuación, cargar el SF2 utilizando Mix_SetSoundFonts().

Cuestiones relacionadas