por Guido Socher (homepage)
Sobre el autor:
A Guido le encanta Linux no sólo porque es divertido descubrir
las grandes posibilidades de este sistema sino también por la gente
involucrada en su diseño.
Taducido al español por:
Carlos Mayo (homepage)
Contenidos:
|
Midi con alsa
Resumen:
Midi es un formato de fichero el cual no contiene sonido digital
muestreado pero contiene una descripción de cómo hacer
el sonido. Es parecido a partitura de notas donde cada una es una
representación simbólica de un tono. Por tanto, los
ficheros midi son pequeños en tamaño comparados
por ejemplo con los ficheros wav.
Para convertir midi en sonido real necesitas un sintetizador midi.
Esta es una pieza de hardware o software el cual usa un número
de muestras de sonido digital de un instrumento (p.e. piano) para
generar los tonos. Estas muestras de sonido se conocen como
"soundfont".
Este artículo explicará cómo usar Alsa
(Arquitectura avanzada de sonido para linux) como una interfaz
sintetizadora midi.
_________________ _________________ _________________
Introducción
Hace algunos años podías encontrar en cualquier
tienda de informática tarjetas de sonido famosas como la
"Gravis UltraSound" o "SoundBlaster Gold". Ambas tarjetas tenían
un hardware interno como sintetizador midi. Desafortunadamente
ya no se pueden comprar esas tarjetas. Incluso si puedieras, no
serviría para un ordenador moderno ya que eran tarjetas para
el bus ISA. El ordenador de hoy en día usa el bus PCI y suele
tener ya un chip de sonido en el chipset de la placa base. Difícilmente
alguno de estos chipsets soportan síntesis de midi. Si
observas la lista de tarjetas
de sonido soportadas por alsa probablemente se preguntará
cuál de estas tarjetas debería comprar. Desafortunadamente
la decisión es mas fácil de lo que parece. Hoy en d&iaacute;a
sólo hay una tarjeta que soporta s&icaute;ntesis de midi y que
puedes comprar en una tienda normal de informática: Soundblaster live.
Si no posees una tarjeta Soundblaster live, puedes emular la
síntesis de midi por software y te explicaré como
hacerlo.
Lo que necesitas
Alsa está actualmente en fase de transición. La
liberación estable 0.5 está anticuada y la 0.9 está
todavía en desarrollo. Si realmente deseas usar aplicaciones
midi con alsa entonces necesitas la 0.5 ya que apenas hay alguna
aplicación para la 0.9 y las interfaces entre la 0.5 y la 0.9
son incompatibles (nota: las muestras de sonido PCM, ficheros wav,
y las aplicaciones basadas en sonido muestreado no tienen ningún
problema con la 0.9, estoy hablando sobre midi.)
Los paquetes para la 0.5 son:
La información de cómo compilar alsa la puedes
encontrar el cómo de alsa (ver referencias). Básicamente
necesitas ejecutar:
tar jxvf alsa-driver-0.5.12a.tar.bz2
cd alsa-driver-0.5.12a
./configure --with-sequencer=yes --with-oss=yes
--with-isapnp=no
make
make install
./snddevices
para el driver y "./configure;make;make install" para el
resto.
Después de la instalación podrás
cargar los módulos en el núcleo. Para la
soundblaster live (=emu10k1 chip) es así:
modprobe snd-card-emu10k1
modprobe snd-synth-emu10k1
modprobe snd-seq-midi
modprobe snd-pcm-oss
modprobe snd-mixer-oss
modprobe snd-seq-oss
Para otras tarjetas, sustituye solamente las dos primeas líneas
por el módulo de tu tarjeta (p.e. snd-card-via686a para una tarjeta
de sonido interna basada en el chip via 686). Mandrake
y Suse soportan alsa y puedes usar también la detección
de hardware y el programa de configuración de tu distribución
linux (harddrake y yast2). Si no tienes absolutamente ninguna idea
de que tipo de chip tienes, entonces ejecuta "lspci -v" (el comando
lspci pertenece a un paquete llamado pciutils).
Ya es hora de comprobar que el sonido funciona. Ejecuta el programa:
alsamixer
y escribe "m" para quitar el silencio del volumen principal y del pcm y luego usa
las teclas de flechas para cambiar el volumen. Presionar Esc para salir
de alsamixer cuando lo hayas hecho.
Para guardar los ajustes en /etc/asound.conf ejecuta el comando
/usr/sbin/alsactl store
Ahora ejecuta
play flute.wav
y deberías oir algún sonido. Si no, ve a /proc/asound
y comprueba /proc/asound/devices y /proc/asound/oss-devices. Debería
haber "mixer" y "digital audio" (mis ficheros).
Esto era para comprobar que la emulación pcm oss y el sonido
en general funcionan. Mas abajo explicaré qué añadir
en /etc/modules.conf para hacer todo automáticamente, pero
el siguiente paso es hacer funcionar midi.
midi
Si tienes una tarjeta de sonido con sintetizador interno midi (sound
blaster live) entonces necesitas cargar el "soundfont" (las muestras
de sonido) en el chip de tu tarjeta de sonido. Si no tienes dicha tarjeta,
entonces debes instalar timidity (ver referencias para la url donde
descargar) y usarlo como un sintetizador midi alsa. Los programas
que se ejecutan encima de alsa no notarán la diferencia..
Cargando el soundfont
Comprueba que tienes instalado el programa sfxload (/bin/sfxload).
Si no, instálalo. Es parte de un paquete llamado awesfx
(comprueba los CDs de tu distribución linux o http://mitglied.lycos.de/iwai/awedrv.html).
Seguidamente copia el fichero 8MBGMSFX.SF2 de tu CD Soundblaster Live
(/mnt/cdrom/AUDIO/Common/SFBANK/8MBGMSFX.SF2) a
/etc/midi/8MBGMSFX.SF2. Para cargar el soundfont ejecuta el comando:
/bin/sfxload /etc/midi/8MBGMSFX.SF2
Un buen programa para comprobar es pmidi (ver referencias). Ejecuta
pmidi -l
Esto debería producir la salida:
Port Client name Port name
64:0 External MIDI 0 MIDI 0-0
65:0 Emu10k1 WaveTable Emu10k1 Port 0
65:1 Emu10k1 WaveTable Emu10k1 Port 1
65:2 Emu10k1 WaveTable Emu10k1 Port 2
65:3 Emu10k1 WaveTable Emu10k1 Port 3
Ahora ejecuta
pmidi -p 65:0 test.mid
y deberías oir un sonido midi. ¡Fantastico!
Usando TiMidity como un sintetizador software
Descarga el paquete TiMidity++-2.11.3.tar.gz (ver referencias
al final), desempaquétalo (tar zxvf TiMidity++-2.11.3.tar.gz)
y edita el fichero common.makefile.in. Ahí descomenta la
linea CFLAGS para pentium gcc:
CFLAGS = -O3 -mpentium -march=pentium
-fomit-frame-pointer \
-funroll-all-loops -malign-double -ffast-math
Ahora puedes configurar timidity con muchos interfaces gráficos
pero ante todo estamos interesados en la opción "
--enable-alsaseq". Sin embargo no pasa nada si activamos
algunas opciones del GUI:
./configure --enable-ncurses --enable-xaw
--enable-spectrogram --enable-xaw=dynamic
--enable-audio=oss,alsa --enable-alsaseq
--prefix=/usr/local/timidity-2.11.3
make
make install
Esto instala timidity en /usr/local/timidity-2.11.3/bin para
no sobreescribir a alguna instalación ya existente
de timidity de tu distribución linux. Instalamos timidity
porque no he visto una única distribución donde
la interfaz alsaseq estuviese activada.
Para timidity necesitas también soundfonts. Ellos los
llaman ahora ficheros de instrumentos. Un buen y completo conjunto
de ficheros de instrumentos es bastante grande (sobre 10Mb). La
manera mas rápida de conseguirlos es, por lo tanto, instalar
el timidity++ de tu distribución (CDrom) y copiar los
ficheros de estos (p.e.
timidity++-2.11.3-1.i386.rpm descarga para redhat 7.3). Para
copiar los ficheros desde /usr/share/timidity/instruments a
/usr/local/timidity-2.11.3/share/timidity/instruments ejecuta:
cd /usr
find share/timidity -print | cpio -dump
/usr/local/timidity-2.11.3
Ahora estamos listos para comprobar la ejecución de
timidity como root:
/usr/local/timidity-2.11.3/bin/timidity -iA
-B2,8 -Os -EFreverb=0
TiMidity starting in ALSA server mode
set SCHED_FIFO
Opening sequencer port: 128:0 128:1
luego pmidi -l:
Port Client name Port name
128:0 Client-128 TiMidity port 0
128:1 Client-128 TiMidity port 1
Voila, tenemos 2 puertos con el sintetizador TiMidity.
Ahora ejecuta
pmidi -p 128:0 test.mid
y deberías oir sonido midi
/etc/modules.conf
Para una configuración y carga automática de módulos
añade esto a tu /etc/modules.conf si tienes una tarjeta
soundblaster live:
alias char-major-116 snd
alias char-major-14 soundcore
alias snd-card-0 snd-card-emu10k1
alias sound-slot-0 snd-card-0
alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-1 snd-seq-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-8 snd-seq-oss
alias sound-service-0-12 snd-pcm-oss
alias midi snd-synth-emu10k1
below snd-seq-oss snd-synth-emu10k1
post-install snd-synth-emu10k1 /bin/sfxload
/etc/midi/8MBGMSFX.SF2 ; alsactl restore
# uncomment to save volume settings at shutdown:
#pre-remove snd-synth-emu10k1 alsactl store
Para una tarjeta diferente sin sintetizador midi, p.e. via686 interna:
alias char-major-116 snd
alias char-major-14 soundcore
alias snd-card-0 snd-card-via686a
alias sound-slot-0 snd-card-0
alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-12 snd-pcm-oss
# restore original mixer:
post-install snd-card-via686a alsactl restore
# uncomment to save volume settings at shutdown:
#pre-remove snd-synth-emu10k1 alsactl store
Para ejecutar timidity automáticamente al arrancar, sugiero
añadir las siguientes líneas a /etc/init.d/alsasound (este script
se instala con el driver pero no se activa. Para activarlo usa
el comando chkconfig)
echo "starting timidity"
timidiy=/usr/local/timidity-2.11.3/bin/timidity # do not forget
the "&" in the next line:
$timidity -iA -B2,8 -Os -EFreverb=0 > /dev/null &
Usando alsa y midi
Hemos usado el programa pmidi de arriba para
reproducir ficheros midi. KDE incluye un buen reproductor llamado
kmid (no confundir con kmidi). Kmid se puede compilar con o sin
soporte alsa. Redhat lo tiene compilado para OSS. Mandrake y Suse
usan Alsa. Es posible usar los binarios de Mandrake con Redhat.
Este artículo esta también pensado para explicar la
instalación de alsa la cual se necesita para otros programas
que se explicarán en próximos artículos. Tenemos
p.e. un artículo sobre Jazz. Jazz es un secuenciador midi
y un editor de ficheros midi. Al final del artículo podrás
encontrar referencias a otras aplicaciones.
También hay programas parecidos a timidity (timidity -ig ejecutará el
GUI gtk) o kmidi (no kmid) los cuales ya incluyen el sintetizador midi en
software. En estos casos no necesitas capacidas internas midi en el núcleo, sea
soportadas por hardware o emuladas en el software timidity. Sin embargo, en general es mejor
tener una api común midi que re-implementar un sintetizador
midi en cada software.
Alsa esta actualmente experimentando grander cambios. Como dije al
principio, la versión 0.9 no funciona con la mayoría de
aplicaciones, sin embargo, la versión 0.5 como se comenta
en este artículo tiene también sus problemas. La
emulación del secuenciador OSS (/dev/sequencer) no funciona
(funciona solamente con las viejas tarjetas soundblaster awe las cuales
no se pueden ya comprar). Eso significa que sólo los programas
midi de alsa funcionarán. Esto afortunadamente cambiará con
la versión 0.9. Este artículo es sin embargo también útil en el futuro
cuando la versión 0,9 tenga más soporte puesto que solamente las cosas
"pequeñas" tales como los nombres de módulos han cambiado entre 0,5 y 0,9.
Los principios básicos seguirán siendo los mismos.
Referencias
Formulario de "talkback" para este artículo
Cada artículo tiene su propia página de "talkback". A través de esa página puedes enviar un comentario o consultar los comentarios de otros lectores
2002-09-05, generated by lfparser version 2.21