| 
 ![[Photo of the Author]](../../common/images/Guido-S.gif)  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]](../../common/images/article259/miditux.gif) 
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]](../../common/images/article259/alsamixer.gif) 
 
    
    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]](../../common/images/article259/kmid_th.gif) 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.
 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