sábado, 29 de diciembre de 2018

¿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.

8 comentarios:

  1. Hola. Nada más comenzando el qsynth me dice esto: "qsynth1: Failed to create the audio driver (jack). Cannot continue without it" ¿qué pasa y cómo hago? Saludos

    ResponderEliminar
    Respuestas
    1. Estimado Eurowilgon:

      Esto se debe a que le ha indicado utilizar el servidor de audio JACK. Normalmente en este caso querría utilizar ALSA. Para ello, en el Qsynth presione el botón Setup, y se abrirá el cuadro de diálogo de configuración de qSynth como se indica en el artículo. Asegúrese de desplegar la solapa Audio, y bajo Audio Driver elegir la opción ALSA. Normalmente bajo el apartado "Device" no se indica nada si solo cuenta con un dispositivo de sonido (por ejemplo, la salida de sonido de la placa madre). Si su equipo dispone de varios dispositivos de sonido deberá indicarle cuál desea utilizar.

      Atte.

      Juan Perón

      Eliminar
  2. Gracias.
    Es una idea interesante.

    Para ser preciso esto no es emular "una AWE-32", el hardware completo, sino solo la default soundfont. Y eso hasta con algunos peros.
    Esto queda bien a la vista ya que para usar este método hay que elegir la opción General MIDI y no AWE-32.

    No se emula el chip OPL, o la emulación berreta que usaron en algunas placas también con el nombre AWE-32 (creative **siempre** haciendo esas canalladas sin avisar).
    No se emulan reverb y chorus originales, se usan los de fluidsynth, o timidity si se usa timidity, o el virtual midi synth que se utilice, etc.
    No se expone una emulación de EMU8000 directamente, que era la forma óptima de usar la placa en DOS. Sino había que usar AWEUTIL, una "emulación" super problemática de GM/MT-32/GS.

    Igualmente se podría "recrear" el synth de una creative Live! usando la default soundfont "CT2MGM.SF2" (2 MB).

    Además sería mejor a estas alturas usar una soundfont mejor, que una de un pobre megabyte.

    En fin, gracias por este articulo y el de munt.



    ResponderEliminar
    Respuestas
    1. Estimado Mariano:

      Naturalmente que se simula el resultado de la AWE32 con el soundfont que contaba en su ROM de 512kb. De momento no tenemos idea de la existencia en el mercado de una placa de audio actual que implemente el EMU8000, lo cual le impedirá tal consideración. La AWE32 es una plaqueta de interfaz ISA, de modo que sólo puede utilizarse en equipos que dispongan de dicha arquitectura, amén de utilizar el sistema privativo MS-DOS. Una implementeción libre del mismo como FreeDOS sin embargo puede operar una placa AWE32 con algunas limitaciones en el direccionamiento de memoria extendida/expandida.

      Los canales de efectos que menciona no eran nativos del integrado EMU8000 sino que los ofrecía circuitería conexa de la AWE (observe el manual de programación de la AWE32 para más datos).https://www.phatcode.net/res/244/files/emu8kpgm.pdf. De hecho, tal era la causa típica del "ruido" que socedía al programar coro o reverb en tiempo real, ya que el procesador de efectos no podía suplir con la demanda de proceso. Por tal motivo se limitaban las reverbs a sus clásicas tablas en ROM "HALL1, HALL2", etc y se desfavorecía alterarlas.

      En fin, detalles del hardware que suele tener poco sentido emular realmente. El EMU8000 era un procesador potente, pero ciertamente limitado, lo mismo que los procesadores OPL2 y 3, que no se utilizaban sino en instrumentos de tercera línea de la productora Yamaha.

      Con respecto a los soundfonts más avanzados, ya los hemos tratado en el blog y naturalmente no era el sentido de esta recreación. Podrá encontrar información al respecto y algunos enlaces de soundfonts libres en https://ubuntuperonista.blogspot.com/2018/03/midi-y-soundfonts-en-ubuntu.html

      Atte.

      Juan Perón

      Eliminar
    2. LLamar de tercera línea los OPL2/3 es un menosprecio no merecido por ese hardware.

      ¿Si era un producto tan malo porque nadie pudo desarrollar algo mejor o al menos igual?
      Ni Creative ni Adlib pudieron desarrollar un sintetizador ni mejor, ni siquiera peor.
      Las emulaciones de Creative dan vergüenza, tienen una calidad pésima.
      NADA pudieron desarrollar que le compita a los OPL.

      Estuvieron en infinidad de consolas y placas de sonido.

      Y siempre, utilizados sin aprovechar su potencial.
      Salvo alguna rarísima excepción, como ésta:

      Dune full AdLib Gold soundtrack
      https://youtu.be/gUfGyfbzl9k

      Eliminar
    3. Estimado Mariano:

      Realmente el OPL3 era un chip literalmente de tercera línea. Afirmar que fuese un desarrollo genial es desconocer la historia de la síntesis de sonido y apartar dispositivos realmente pensados para instrumentos o sistemas de juego de alta gama, como los OPN.

      El OPL constaba de cuatro operadores, un esquema ya superado en 1991. El Yamaha DX7, por nombrar al más influyente de los sintetizadores de la marca, tenía seis operadores programables ya en 1983, y para 1987 existía la versión DX7IID que colocaba dos chips de estos en su mother).

      La razón de usar los OPL y exprimir al máximo su escaso jugo no era otra que armar una placa que dotase a la insulsa PC de una solución barata, usando para ello el chip más barato que se pudiese encontrar, capaz de programarse sin necesidad de direccionamiento de memoria directo (sin DMA), y con la tecnología de soldado convencional, descartando el uso de ROM separadas. Yamaha ofrecía OPLs bajo esa premisa, y no mentía a nadie, sólo basta con leer la documentación oficial del chip. Jamás lo comercializaron como "el mejor y milagroso", ni siquiera de su propia línea, sino una buena solución costo-prestaciones con cero electrónica glue. Un chip "peronista para la masa". Inteligente decisión.

      Como generador de sonido es versátil. Ni siquiera cuenta con salida estéreo, sino que deben formarse la unión de dos OPLs a través de un canalizador para ofrecer dicho efecto al coste de una salida dura, sin paneos intermedio.

      Naturalmente, coste unitario increíble permitían dicha duplicación. No era mala idea.

      Ni AdLib ni Creative Labs desarrollaron chip de síntesis alguno. AdLib ofrecía una placa con sintetizador único, y a costes canadienses. Creative Labs ofrecía la integración vertical y on-the-shelf a coste asiático, con la misma calidad de síntesis OPL y el agregado de audio digitalizado que AdLib no tenía, con un coste incluso menor. Una excelente obra de mercadeo concluyó su puesta y la llevó a dominar este segmento. Sus proveedores Yamaha y E-MU ofrecían sus modelos de chips y código de software. Un ejemplo suele aclararlo todo, a comienzos del ensamblado las primeras iteraciones de las plaquetas SB incluso testaban la marca a los integrados YM con etiquetas negras. Hoy a esas placas les dicen "las añejas" (por la etiqueta negra, entenderá).

      Puede conocer las características del YM262 leyendo su manual técnico y apreciando su sonido, y comparándolo con las líneas OPN YM2203 de la NEC PC-98 de factura anterior o el YM-2608 de la serie siguiente NEC PC98xx/Sega Megadrive. Ambos constan de mejor factura y opciones, y el chip de síntesis podía recibir sonido digital directamente, se lo usaba para técnicas de síntesis con pre-samples o para generar ruido a través de su canal noise. Cualquiera de ellos presentaban un estéreo rico, que la yunta de OPL no podía igualaar. Sus filtros ya eran profesionales y no lúdico.

      En fin, técnica japonesa para sus oligárquicas NECs y fichines impulsados por Motorolas. Encontrará composiciones más técnicas que las del Dune 1 de manos de Ryu Takami, o Ryu Umemoto, tocayos de larga carrera en el mundo de la síntesis lúdica en Japón.

      Atte.

      Juan Perón

      Eliminar
  3. Juan, no se puede comparar un full synth profesional de US $1,995 en 1983 con un chip FM de consumo masivo de menos de USD 100, (DX7 vs OPL2 o 3)
    Era de lo mejor en su gama de precios, obviamente a eso me refería.
    Si el Yamaha no era gran cosa, los clones fueron pésimos.

    La soundblaster era notoria por tener una circuitería de amplificación berreta, que redundaba en mala calidad de sonido.
    Al contrario que las adlib.

    Le acepto recomendaciones de soundtracks de Ryu Takami y Ryu Umemoto.

    ResponderEliminar
    Respuestas
    1. Volvemos a lo mismo. La integración vertical de las grandes empresas de capital nipón exacerbó la capacidad productiva, a punto que la corporación Yamaha en los 80s no solamente dominaba en ámbito motor, sino también motonáutico, instrumentos musicales, electrónica de consumo, desarrollo de instrumental médico, desarrollo musical punta, y demás. En todo los aspectos previeron un desarrollo dividido en gamas (fue pionera en hacer tal proposición). Semejante integración hizo que pudiesen catalogar los OPL por chirolas.

      Los chips YM262 del DX100 y DX7, onerosos en 1983, eran esciancialmente la misma arquitectura que los OPL, con algunas diferencias referidas a duplicar en el die la circuitería de voces, y colocar en la ROM del chip nuevas formas de onda. Se trataba de chips amortizados ya para la época donde se comenzaron a licenciar y vender directamente. La nomenclatura OPL, de hecho, era la designación OEM de esos chips, que se vendían por catálogo y en cantidades astronómicas.

      La programación del audio chip, algo compleja para los parámetros actuales, hacía algo difícil su uso, pero tenía las necesarias voces, y era una implementación prolija para una placa. Las AdLib fueron las primeras en colocarlos, pero como se trataba de materiales "off the shelf" (de libre compra), pronto aparecieron copias clónicas de la placa. Nada impride que la pueda hacer usted mismo con algo de práctica en electrónica de microcontroladores.

      Sobre la calidad de AdLib y SB, hay que ver de qué versión hablamos. Generalmente las AdLib no tenian diferencia en el sonido con respecto a las SB. Si entiende de microelectrónica y observa una AdLib verá que lo que usted llama "circuitería de amplificación" no es nada del otro mundo, se trata de componentes discretos que se pueden conseguir hoy en cualquier casa de elecrónica y hacerse clones excelentes si dispone de YM262.

      El secreto no estuvo tanto en el despliegue técnico ni de calidad de audio, sino mas bien en establecer la arquitectura ISA como vector para un chip lo suficientemente bueno que se impusiera como estándar de facto. Tal fue el rol que el OPL cumplió excelentemente, con una enorme librería de títulos que lo soportaban. AdLib impulsó la ola en el 87 y SB la continuó. Los clones que usted menciona fueron cabalgando también esta ola, normalmente con malos resultados regulares o mediocres.

      P.-

      Eliminar