¿Cómo emulo una placa de sonido Sound Blaster AWE-32 en DOSbox en Ubuntu?

En pleno aeropuerto De Gaulle en París, Juan Perón anuncia a los periodistas allí reunidos sobre su inminente regreso a la Argentina y explica cómo emular el clásico sonido MIDI de una placa AWE-32 en juegos MS-DOS emulados bajo DOSbox en Ubuntu.

¡Compañeros!

Indudablemente que un sistema operativo de alcance popular como los es GNU con Linux - y Ubuntu como su distribución particular - ha de presentar todas las capacidades que anhelan los hombres. Desde un inicio nuestro Movimiento se ha concentrado - por tanto - en hacerlo modular y capaz de afrontar las más elevadas exigencias en pos del bienestar de los hombres.
Esto es así pues encadenar el uso de herramientas para disímiles usos es lo que torna a un sistema poderoso. Esto es lo adecuado y también lo justo.

No quedan dudas para nadie que el emulador DOSbox cuenta con una emulación sobresaliente del audio Sound Blaster FM de dicha Era, es cierto que no emula todas las posibilidades de las placas de sonido mas avanzadas de entonces, en particular, del modelo Sound Blaster AWE-32. Los juegos de MS-DOS compatibles con la placa de sonido AWE-32 reproducían mejor la música secuenciada MIDI gracias al chip EMU8000, que no está actualmente emulado nativamente en DOSbox.

La Creative Labs Sound Blaster AWE-32 (1994) - si bien contaba con el chip sintetizador Yamaha OPL3 para música FM - incorporó por primera vez un sintetizador EMU8000 específico que utilizaba síntesis por modulación PCM, y podía aplicar efectos de reverberación y coro para enriquecer la música. Utilizaba muestras de instrumentos digitalizados y los resultados eran más realistas que los posibles a través del uso de síntesis FM. La placa incluía 1MB de memoria ROM con un banco de 128 instrumentos mas un patch percusivo, pregrabados según la norma "General MIDI", y adicionalmente incorporaba dos ranuras para memoria RAM para totalizar unos 28 MB para bancos de sonidos de usuario a través de software especializado (los llamados "Soundfonts").


Como resultado de los problemas indicados, algunos juegos suenen tristísimos con música de la SoundBlaster 16. ¿Cómo podemos hacerlos sonar como lo hacíamos con la poderosa AWE-32?

Pues bien señores, gracias al Justicialismo podremos hacer uso de la peronista modularidad de Ubuntu, y gracias a ella realizar un "puenteo sonoro" utilizando un sintetizador virtual asociado a DOSbox, al cual dotaremos de un archivo Soundfont copiado de la memoria ROM de la AWE-32.


Esto podría sonar difícil, pero os instruiré de manera paternal y Justicialista. Ya he explicado cómo utilizar archivos de Soundfonts para reproducir ficheros de musica MIDI aquí. Por otro lado, es necesario tener ya instalado y configurado en nuestro sistema al emulador DOSbox como os he indicado aquí.

Conforme tengamos esto, ya podremos abocarnos a replicar la AWE-32 en Ubuntu. Primero instalaremos el sintetizador virtual Fluidsynth y el frontend gráfico Qsynth para poder usarlo fácilmente. Para tal objetivo, abrimos una Terminal con Ctrl+Alt+T e ingresamos los siguientes comandos de organización:

sudo apt update
sudo apt install fluidsynth qsynth dosbox

Acto seguido, reiniciamos el sistema con:

sudo reboot

Al volver ya estará finalizada la instalación del sintetizador virtual e iniciado éste, pero para que cumpla su función hemos de descargar el Soundfont con los instrumentos de la placa de sonido AWE32, e instalarlo. Para ello abro nuevamente una terminal con Ctrl+Alt+T e ingreso:

cd ~/Descargas/
wget http://www.zlizeq.com/Files/1mgm.zip
unzip 1mgm.zip
sudo mv 1mgm.sf2 /usr/share/sounds/sf2/awe32.sf2

Ahora abrimos el front-end Qsynth desde Aplicaciones / Sonido y Video / Qsynth. Este programa en forma de panel nos permite configurar el sintetizador virtual FluidSynth de manera gráfica y relativamente sencilla.
Para configurarlo debo presionar el botón Setup...

Se abrirá la ventana de configuración "Qsynth Setup". En ella tendremos la solapa "MIDI", en la que nos debemos asegurar de tildar la opción "Enable MIDI Input" para activar la escucha de mensajes MIDI que vendrán del emulador DOSbox. Reviso que el controlador MIDI sea "alsa_seq", y que el modo de selección de bancos MIDI sea "gm" para "General MIDI".
En la solapa "Soundfonts" presiono el botón "Open...". Se abrirá una ventana que nos mostrará los Soundfonts localizados en la carpeta /usr/share/sounds/sf2/. Elegimos el soundfont awe32.sf2 y presionamos el botón "Abrir". Con ello agregaremos este soundfont a la lista de soundfonts utilizables.

Hemos de tener en cuenta que si hubiese varios soundfonts listados, Qsynth  siempre utilizará el último de la lista. Por ello debemos seleccionar el awe32.sf2 y presionar el botón Down para bajarlo de posición hasta que quede último.

Al presionar el botón Aceptar, surgirá un alerta advirtiendo que tenemos que reiniciar el sintetizador virtual FluidSynth para que los cambios surtan efecto. Presionamos el botón Si y se habrá iniciado ya el sintetizador con el soundfont de la AWE32, quedando a la escucha de mensajes MIDI.
Acto seguido y sin cerrar el Qsynth, debemos configurar por única vez el emulador DOSbox para que utilice como salida MIDI al sintetizador virtual FluidSynth que hemos configurado. Para ello debemos conocer cuál número de Cliente MIDI utilizado por FluidSynth en nuestro sistema particular. Con tal fin, en la Terminal le ingresamos el comando:

aconnect -o

...y el sistema nos devolverá algo como:

cliente 14: «Midi Through» [tipo=kernel]
    0 'Midi Through Port-0'
cliente 128: «TiMidity» [tipo=usuario,pid=907]
    0 'TiMidity port 0 '
    1 'TiMidity port 1 '
    2 'TiMidity port 2 '
    3 'TiMidity port 3 '
cliente 129: «FLUID Synth (5116)» [tipo=usuario,pid=5116]
    0 'Synth input port (5116:0)'

Naturalmente, en vuestro caso dicho número 129 podría variar. Debemos anotar cual es. Ahora editamos el archivo de configuración de DOSbox mediante el comando:

nano ~/.dosbox/dosbox-0.74.conf

...se abrirá el editor GNU Nano con el archivo de configuración dosbox-0.74.conf. Dentro de este archivo, buscaremos la sección [midi] y la modificamos para que la variable mpu401 tenga el indicador intelligent, y la variable midiconfig tenga el número de cliente de FluidSynth seguido por :0, de la siguiente manera:

mpu401=intelligent
mididevice=default
midiconfig=129:0



(naturalmente vosotros cambiarán el 129 por su número de cliente particular, pero siempre va finalizado de :0. Conforme esté editado de tal manera, guardamos los cambios realizados con Ctrl+o y saldremos del editor GNU Nano con Ctrl+x.

Ahora, con el Qsynth encendido, ya podremos abrir DOSbox desde Aplicaciones / Juegos / Emulador DOSbox y configurar o instalar los juegos que querramos.

En mi caso utilizaré los conocidos juegos de estrategia en tiempo real Warcraft: Orcos vs. Humanos y Warcraft II: Tides of Darkness como ejemplos.

Debemos asegurarnos de configurar los juegos para utilizar el dispositivo General MIDI como salida de música (incluso si existiese la opción AWE-32), y Sound Blaster como salida de audio. A tal fin, la mayoría de los juegos contaban con una rutina de configuración de audio durante su instalación en MS-DOS o posterior a ella. Normalmente se llamaba setup o install y se encontraban en el mismo directorio del juego.

En el caso del Warcraft 2 esta configuración se hacía por medio del comando setup, y podíamos configurar tanto la salida de audio digital (SoundBlaster 16) y General MIDI como la música secuenciada MIDI.

En otros juegos podría solicitársenos que ingresáramos a mano los datos de la placa de sonido Esto era algo normal en la Era DOS, y debemos utilizar los valores estándares que eran Dirección 220, Interrupción IRQ 5, y Canal DMA 1. Si se nos solicita la dirección del Canal MIDI o del canal Roland, también debemos usar la estándar, que era 330 o H330. Un ejemplo de este tipo era el clásico Duke3D:
Una vez configurado el audio digital, ya podremos iniciar el juego propiamente dicho.
 En el panel de Qsynth debería indicarse actividad MIDI por medio del testigo verde en la parte inferior del control. También debería escucharse la música MIDI a través del soundfont, como si de una real AWE-32 se tratara.


...¡y ya podremos oir el juego con una música similar a la clásica Sound Blaster AWE-32 en Ubuntu!

Si la música suena fuerte o débil podremos utilizar le control "Gain" del panel Qsynth para ajustar su volumen y emparejarlo con el de la salida de audio digital. También podríamos activar las opciones de Reverb y Chorus para darle efectos de eco/reverberación y coro, para que la música no suene tan "seca". Los valores bajos eran los que utilizaba la AWE-32 original, pero podremos regularlos como deseemos.

Asimismo, algunos juegos contaban con un regulador de volumen interno para el los efectos de sonido de audio digitalizado (SFX) o de la música MIDI a través de una interfaz especial, que también podríamos querer utilizar para equilibrar el sonido y la música.
Indudablemente que en lugar del soundfont awe32.sf2, podremos utilizar otros mucho más logrados, y hacer que los veteranos juegos suenen como una orquesta hecha y derecha. A tal fin existen muchos soundfont "General MIDI" gratuitos que podremos descargar, como os he indicado.