[LinuxFocus-icon]
Hogar  |  Mapa  |  Indice  |  Busqueda

Noticias | Arca | Enlaces | Sobre LF
Este documento está disponible en los siguientes idiomas: English  Castellano  ChineseGB  Deutsch  Francais  Italiano  Nederlands  Russian  Turkce  

convert to palmConvert to GutenPalm
or to PalmDoc

[Photo of the Author]
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

[Illustration]

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.

[alsamixer]

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

[kmid] 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
 Ir a la página de "talkback" 

Contactar con el equipo de LinuFocus
© Guido Socher, FDL
LinuxFocus.org

Pinchar aquí para informar de algún problema o enviar comentarios a LinuxFocus
Información sobre la traducción:
en --> -- : Guido Socher (homepage)
en --> es: Carlos Mayo (homepage)

2002-09-05, generated by lfparser version 2.21