Blood en DOSEmu

Iniciado por Eye del Cul, Enero 03, 2014, 11:05:54 PM

Tema anterior - Siguiente tema

Eye del Cul

DOSEmu es un emulador de MS-DOS para Linux. Algo así como DOSBox, pero más antiguo, más complicado de configurar..., ¡y más rápido!

Aquí lo tenéis en mi Pentium 4:



Con DOSBox, Blood es apenas jugable. Con DOSEmu, corre de forma fluida a 640x480 píxeles. Con el sonido, sin embargo, es difícil acertar: en ese aspecto DOSBox simplemente funciona, con DOSEmu tienes que hacer apaños con ALSA y la emulación de OSS.

PD: También lo he probado en QEMU, pero por alguna razón Blood me colgaba la máquina virtual.
«Porque buscar a alguien patético en Internet es como buscar caballos en un establo: encontrarás alguno, seguramente» -- Phobos Anomaly

Lenin

Puedo saber como has arreglado el sonido?

Te explico: Tengo un PIII corriendo Linux sin ningun tipo de interfaz grafica. Uso DosEmu para jugar juegos de Ms-Dos, que van de forma "nativa" (hasta arranco Dos 6.22 con el DosEmu), pero sin efectos de sonido. La musica sin embargo funciona de maravilla...

Cuando busco en google como arreglar esto, siempre hay cripticas soluciones sobre conectar dispositivos hardware MIDI, y otra basura inutil.
"Las ideas son más poderosas que las armas. Si no permitimos a nuestros enemigos tener armas; ¿Porqué ibamos a permitirles tener ideas?" (Stalin)

Eye del Cul

#2
Después de probar mucho, he llegado a la siguiente solución:

Primero, mi tarjeta de sonido es una integrada de Intel, y carece por tanto de secuenciador midi. Así que hay que usar un secuenciador por software: es decir, Timidity.

Timidity tiene un montón de modos distintos de funcionamiento y es un capítulo en sí mismo. Para DOSEmu, yo lo arranco como como "servidor ALSA", usando la opción -iA:

$ timidity -iA --verbose=2 --delay d --chorus d --reverb d --voice-lpf d --resample d -Os -B2,8

De este modo, Timidity se queda a la escucha, esperando recibir canciones para reproducirlas. Las otras opciones (--reverb d, etc) sirven para desactivar efectos y minimizar el consumo de recursos del ordenador, que a mi Pentium 4 no le sobran.

Segundo, uso el módulo del kernel Virmidi (snd_virmidi) para crear dispositivos midi virtuales que reciban la salida de Timidity:

# modprobe snd_virmidi

Si no tienes Virmidi, tendrás que entrar en el árbol de código del kernel y compilarlo. Si desde el 2.6.22 no lo han cambiado, está en "Device Drivers --> Sound --> Advanced Linux Sound Architecture --> Generic Devices --> Virtual MIDI Soundcard".

Tras cargarlo, deberías ver estos dispositivos virtuales, y los creados por Timidity, ejecutando:

$ aconnect -ol
client 14: 'Midi Through' [type=kernel]
    0 'Midi Through Port-0'
client 20: 'Virtual Raw MIDI 1-0' [type=kernel]
    0 'VirMIDI 1-0     '
client 21: 'Virtual Raw MIDI 1-1' [type=kernel]
    0 'VirMIDI 1-1     '
client 22: 'Virtual Raw MIDI 1-2' [type=kernel]
    0 'VirMIDI 1-2     '
client 23: 'Virtual Raw MIDI 1-3' [type=kernel]
    0 'VirMIDI 1-3     '
client 128: 'TiMidity' [type=user]
    0 'TiMidity port 0 '
    1 'TiMidity port 1 '
    2 'TiMidity port 2 '
    3 'TiMidity port 3 '


Ahora hay que enlazar uno de los dispositivos de Virmidi con uno de los de Timidity. Ante la duda, el primero --en tu sistema los números pueden cambiar, claro--:

$ aconnect 20:0 128:0

En mi sistema, el dispositivo 20:0 de Virmidi se corresponde con /dev/snd/midiC1D0. Así que, gracias a la orden anterior, todos los eventos midi que uno envíe ahí los recibirá y reproducirá Timidity.

Tercero, DOSEmu envía las notas midi a un dispositivo especial, ~/.dosemu/run/dosemu-midi, en una carpeta oculta dentro del directorio raíz del usuario. Si no existe, hay que crearlo:

$ cd
$ mkdir -p .dosemu/run
$ cd .dosemu/run
$ mknod dosemu-midi p


Cuarto, antes de iniciar DOSEmu hay que comunicar ~/.dosemu/run/dosemu-midi con el dispositivo creado por Virmidi. Así:

$ cat ~/.dosemu/run/dosemu-midi > /dev/snd/midiC1D0

(Si no lo entiendo mal, las notas son emitidas por DOSEmu a través de ~/.dosemu/run/dosemu-midi, de ahí pasan a Virmidi (/dev/snd/midiC1D0), y éste las envía a Timidity, que por fin las interpreta. Yupiii...)

Y quinto, resulta que DOSEmu es una aplicación que emplea OSS para el sonido (OSS es el sistema de sonido antiguo que empleaba Linux, hoy sustituido por ALSA). Esto es una putada, porque los programas viejos basados en OSS quieren por lo general la tarjeta de sonido para ellos solos. De modo que uno no podría escuchar al mismo tiempo los efectos reproducidos por DOSEmu y la música interpretada por Timidity. A no ser que...

Bueno, gracias a Dios, ALSA emula OSS. Y, además, ALSA incluye un mezclador por software, que permite que varios programas suenen a la vez, a cambio de algo más de trabajo para el procesador. Así que hay que ejecutar DOSEmu mediante aoss, el script de ALSA para emular OSS:

$ aoss dosemu

Y con esto creo que puedes jugar en DOSEmu con música y sonido. A mí me funciona así, al menos. Eso sí, con los juegos de DOS uso la General Midi como tarjeta de sonido.




PD: Mi portátil es más potente. Con él puedo prescindir de Virmidi, y usar en su lugar midid, el intérprete midi que incluye DOSEmu. Naturalmente, tengo que correrlo todo usando el OSS emulado por ALSA:

$ timidity -ir 7777 -Os &
$ aoss midid -d 2 --port=7777 ~/.dosemu/run/dosemu-midi &
$ aoss dosemu


Este otro método es más corto pero requiere más máquina.
«Porque buscar a alguien patético en Internet es como buscar caballos en un establo: encontrarás alguno, seguramente» -- Phobos Anomaly

Eye del Cul

Los lectores listos os habréis dado cuenta: el sonido en Linux, si uno escarba bajo la superficie, es un puto caos que haría llorar a los niños. Y eso que no he mencionado PulseAudio, porque mi médico me ha prohibido acercarme a menos de quinientos metros de eso, y en mi sistema no lo uso.

Y ahora los flipaos de Wayland y Mir quieren crear un desorden parecido con los gráficos...
«Porque buscar a alguien patético en Internet es como buscar caballos en un establo: encontrarás alguno, seguramente» -- Phobos Anomaly

Lenin

Muchas gracias!

En cuanto vuelva a Londres de mis vacaciones de Navidad, enchufo el ordenador y lo pruebo

Y si, lo de PulseAudio es una mierda: Recuerdo que me vi forzado a usarlo para usar unos cascos inalambricos, y al poco de andar peleandome entre si poner primero el demonio bluetooh, el pulseaudio, que se deseleccionaban los cascos solos... bueno, terminaron en un cajon guardados para siempre, y pulseaudio en la lista negra de cosas a no volver a instalar en mi vida, junto con los programas antivirus.

Y afortunadamente, no he tenido la desgracia de tener que lidiar con servidores graficos exoticos....
"Las ideas son más poderosas que las armas. Si no permitimos a nuestros enemigos tener armas; ¿Porqué ibamos a permitirles tener ideas?" (Stalin)

Eye del Cul

Tras unas pruebas más, con mi portátil, puedo comentar que el primer método (Timidity + Virmidi) funciona mejor que el segundo, con música que nunca suena con retrasos y sonido limpio.

En el caso de Blood al menos, la diferencia de velocidad entre DOSBox y DOSEmu es bastante grande.
«Porque buscar a alguien patético en Internet es como buscar caballos en un establo: encontrarás alguno, seguramente» -- Phobos Anomaly