Curso de Audio-MIDI Linux con ALSA y sin GUI (post Hispasonic)
Salta a la navegació
Salta a la cerca
A raíz de un anterior post, en que quería hacer notar que no todo empieza y acaba con JACK, comenté que si tuviera que hacer un curso de Audio-LInux no hablaría de JACK hasta la práctica 10. Básicamente la idea la mantengo, aunque seguramente tendría que reducir el número de 10 a 5... Dependiendo de la duración, de los objetivos, del nivel previo de los alumnos, de sus expectativas, de si le das un enfoque más teórico o pràctico, más de programación o de hacer música. 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
creat per Joan Quintana Compte, gener 2012