Bueno, aquí van las 10 prácticas, a ver qué os parecen, qué añadiríais y que quitaríais:
--------------------------------------------
*PR 1. Tarjeta de sonido y configuración
$ cat /proc/asound/version
$ cat /proc/asound/cards
$ cat /proc/asound/devices
$ ls /dev/snd
$ lsusb
$ alsamixer
$ speaker-test
$ sudo /sbin/alsa force-reload
Ejercicio básico: hacer sonar una nota midi por línea de comandos I
$ echo -ne '\x90\x46\x64' > /dev/snd/midiC1D0
$ sleep 2
$ echo -ne '\x80\x46\x64' > /dev/snd/midiC1D0
--------------------------------------------
*PR 2. ALSA Utilites. Audio
$ aplay -l
$ aplay -L
$ aplay -vv somefile.wav
$ arecord -vv -fdat foo.wav
jugando con los parámetros:
$ aplay -D plughw:UA25EX /usr/share/sounds/alsa/Front_Center.wav
$ arecord -r 44100 -f cd -t wav -D plughw:UA25EX foobar.wav
--------------------------------------------
*PR 3. ALSA Utilites. MIDI
$ amidi -l
$ aplaymidi
$ arecordmidi
$ aseqdump
Ejercicio básico: hacer sonar una nota midi por línea de comandos II
# play middle C for 2 seconds on channel 1 then turn it off
amidi -p hw:1,0 -S "90 3C 7F"
sleep 2
amidi -p hw:1,0 -S "90 3C 00"
--------------------------------------------
*PR 4. Conexiones básicas
$ aconnect -i -o
$ fluidsynth -m alsa_seq -a alsa -l /home/joan/soundfonts/AI-APiano02trans.sf2
$ vkeybd
$ aconnect 130:0 129:0
$ aconnectgui
--------------------------------------------
*PR 5. Programación ALSA. Audio
http://www.suse.de/~mana/alsa090_howto.html
Basic PCM audio (http://www.suse.de/~mana/alsa090_howto.html#sect02)
Es un ejemplo de síntesis de audio. Se trata de generar una diente de sierra y enviarla directamente a la tarjeta de sonido
Otros enlaces:
http://home.roadrunner.com/~jgglatt/tech/linuxapi.htm
http://www.alsa-project.org/alsa-doc/alsa-lib/pcm.html
--------------------------------------------
*PR 6. Programación ALSA. MIDI
http://www.suse.de/~mana/alsa090_howto.html
Enviar una nota MIDI directamente a la tarjeta de sonido utilizando ALSA rawmidi (el propio programa genera la nota):
http://home.roadrunner.com/~jgglatt/tech/arawmidplay.htm
http://www.midi-howto.com/midi-howto-9.html
Ejercicio 1 (secuenciador, tiene un puerto de entrada, recibe mensajes MIDI). seq_demo.c.
http://www.suse.de/~mana/seqdemo.c
Para compilar:
$ gcc seqdemo.c -o seqdemo -lasound
Ejercicio 2 (enrutador, tiene un puerto de entrada y un puerto de salida)
--------------------------------------------
*PR 6b. Programación ALSA. Audio + MIDI
Ejemplo miniFMsynth: recibe mensajes MIDI y el mismo programa sintetiza la nota.
http://www.suse.de/~mana/alsa090_howto.html#sect06
--------------------------------------------
PR 7. Gestión de las sesiones con Bash Scripts
Por ejemplo,
#!/bin/bash
/usr/local/bin/fluidsynth -a alsa -m alsa_seq -o audio.alsa.device='plughw:1' -c 2 -z 64 -r 44100 -l Casio_VL_1.SF2 &
sleep 5
/usr/bin/vkeybd &
sleep 5
/usr/bin/aconnect 'Virtual Keyboard':0 'FLUID Synth':0
--------------------------------------------
*PR 8. Sintetizadores
8.0. Timidity (lo pongo porque siempre está a mano)
8.1. Fluidsynth
8.2. LinuxSampler
--------------------------------------------
*PR 9. Hacer música. Herramientas
-playback ficheros SMF: aplaymidi (ALSA utility), pmidi (http://sourceforge.net/projects/pmidi/files/)
-metrónomos: gtick (http://www.antcom.de/gtick/), KMetronome (http://kmetronome.sourceforge.net)
-sintetizadores: timidity (siempre está a mano), fluidsynth (con ficheros soundfont), o LinuxSampler (se pueden conseguir mejores sonidos)
-DAW CLI: ecasound (http://eca.cx/ecasound/). Sofware multipistas para grabar y reproducir (sería como Ardour pero en línea de comandos)
--------------------------------------------
*PR 10. Hacer música
Como corolario de este tutorial hecho exclusivamente con ALSA y sin interficie gráfica, grabaríamos con ecasound una canción con tres pistas. En la primera pista la voz (con metrónomo-claqueta). En las otras dos una línea melódica y otra de acompañamiento, entrándolas con un teclado MIDI y utilizando uno de los sintes que se comentan. Al final se tiene que conseguir una mezcla de las tres pistas en formato ogg.
NOTAS
*Evidentemente al curso le doy bastante contenido de programación (es deformación profesional)
*ALSA y CLI (línea de comandos) no van juntos. También son válidas las combinaciones ALSA-GUI, JACK-CLI, JACK-GUI (evidentemente, es lo que utiliza todo el mundo), y combinar ALSA con JACK
*Algunas de las ideas expuestas no las he probado, son sólo ideas que tendría que trabajar. Por ejemplo, no he utilizado nunca ecasound (aunque ahora me ha entrado el gusanillo)
*Se nota que soy más programador que músico... (que no quiere decir que sea bueno en ninguna de las dos cosas), y que la máxima de "menos trastear, más música", no la sigo para nada.
*he escogido fluidsynth (QSynth) y linuxsampler (QSampler) porque son mis soft-sintes habituales y trabajan en línea de comandos.
*El curso no se acabaría aquí, continuaría hablando del servidor de JACK (eso sí, siguiendo la tónica, primero jackd en línea de comandos y más adelante QJackCtl). El curso acabaría con Ardour, 2 años más tarde...
*Estoy programando una aplicación que un día me gustaría enseñar, y para nada utiliza la API de ALSA, sino la de JACK
*El curso no se va a hacer ni desarrollar, es tan sólo para ordenar las ideas.
Saludos