Xerrada festa Maverick Meerkat 10.10. JACK: el servidor d'audio
Salta a la navegació
Salta a la cerca
organització festa
Presentació diapositives
Guió de la xerrada
Llista diapositives ================= 0. Portada ---------- 1. Audio amb Linux: avantatges i inconvenients ---------------------------------------------- Avantatges: -software lliure: free i gratuït -utilitzar Linux ja és un avantatge: scripting, preparar la màquina per buscar el màxim rendiment, eliminar tot el que no necessites,... -aplicacions en mode consola + front end gràfic -modular -pots provar les últimes versions -molta informació i documentació -comunitat Inconvenients: -comunitat: al final al darrere de cada projecte no hi ha massa persones -la gent vol fer música i no estar fent tweaking tota l'estona -els MAC continuen sent un estàndard. No hi ha suport dels fabricants de hardware -errors de disseny en el Kernel, USB 2. ALSA: Advanced Linux Sound Architecture 3. JACK: JACK Audio Connection Kit 4. ALSA o JACK? 5. Kernel RT i variants 6. Latència 7. Preparar el sistema per a audio 8. Classificació prgramari (reproductors, editors d'audio, DAW, seqüenciadors, sintetitzadors, utilitats,...) 9. Exemples pràctics. Cadena de clients JACK *vkeybd + PHASEX + SooperLooper *sessió de gravació amb Ardour + jack-rack 10. automatitzar les configuracions 11. l'API de JACK: hola món audio i hola móm MIDI 12. llistes de distribució i suport 13. Música feta amb Linux i programari lliure 2. ALSA: Advanced Linux Sound Architecture ------------------------------------------ http://www.alsa-project.org Advanced Linux Sound Architecture (ALSA) proporciona funcionalitat audio i MIDI als sistemes Linux. Característiques: * Suport eficient per a tot tipus de targetes de so (audio interfaces), des de targes de so estàndar fins a targes de so professionals muticanal * controladors de so modulars * SMP and thread-safe design. * API o llibreria d'usuari (alsa-lib) per a programar aplicacions d'audio i MIDI i proporcionar una capa d'alt nivell (no preocupar-se del hardware). * Suport a l'API de Open Sound System (OSS) (estàndar anterior d'audio a Linux), tenint així compatibilitat cap endarrere. 2b. $ lsusb $ cat /proc/asound/cards $ cat /proc/asound/devices $ ls /dev/snd $ aplay -D plughw:UA25EX /usr/share/sounds/alsa/Front_Center.wav $ arecord -r 44100 -f cd -t wav -D plughw:UA25EX foobar.wav $ amixer $ alsamixer $ aconnect -il -ol (ALSA sequencer connection manager) $ aconnectgui 2c. comencem a fer soroll vkeybd + fluidsynth + aconnect $ vkeybd $ fluidsynth -m alsa_seq -a alsa -o audio.alsa.device=plughw:2 /home/joan/soundfonts/Unison.SF2 $ aseqdump $ aconnectgui (per a fer les connexions) 2d. enviar una nota midi a la targeta de so la UA-25EX sí que es raw midi,i es correspon a un port físic real. Ara bé, si vull fer sonar el fluidsynth, necessito un Virutal MIDI Port. És a dir, si vull redirigir els missatges MIDI que genero a fluidsynth (o a PD, o a CSound), necessito un port midi virtual per retenir el missatge MIDI a dins de l'ordinador. $ sudo modprobe snd-virmidi $ sudo modprobe snd-virmidi snd_index=3 $ fluidsynth -m alsa_seq -a alsa -o audio.alsa.device=plughw:2 /home/joan/soundfonts/Unison.SF2 Envio directament al dispositiu Note On, Do central (60), volum 100 $ echo -ne '\x90\x3C\x64' > /dev/snd/midiC3D0 fins ara, no hem parlat res de JACK 3. JACK: JACK Audio Connection Kit ---------------------------------- *http://www.jackaudio.org/ *GUI: qjackctl JACK és un sistema per enviar audio (i MIDI) entre aplicacions. Cada aplicació corre amb sincronia amb les altres, sincronia a nivell de mostra (sample). Tot el sistema està dissenyat per córrer a molt baixes latències (tan baixes com pugui el teu hardware). JACK ha estat dissenyat des de sota pensant en dona resposta al nivell professional. JACK és moltes coses: *API: la definició de les estructures de dades, protocols i funcions que utilitzen els programes que són clients de JACK *una implementació de la API: hi ha un servidor, jackd, i múltiples clients que utilitzen la llibreria, *GUI: la implementació de JACK no està associada a cap GUI, però amb una GUI es facilita les tasques per als usuaris. 3b. ALSA o JACK? Tant ALSA com JACK són una HAL (high abstraction layer), de manera que no ens hem de preocupar del hardware; i totes dues tenen una API d'audio per a Linux. ALSA proporciona el driver per defecte que fa servir JACK. La API d'ALSA és potent, però no proporciona una API basada en callback i no ofereix solucions per a la comunicació entre aplicacions. 4. Kernel RT i variants ----------------------- https://help.ubuntu.com/community/UbuntuStudio/RealTimeKernel JACK requires real-time scheduling privileges for reliable, dropout-free operation. The server requests these privileges when running with the -R option. Most recent distributions use PAM to manage the permissions of users on a relatively granular level. If the file /etc/security/limits.conf exists on your system, it is using PAM. In order to configure PAM such that normal users can run jackd with realtime privileges make sure the following lines exist, granting realtime priority and memlock privileges to the audio group: @audio - rtprio 99 @audio - memlock unlimited This assumes that the users that are allowed to run jack are members of the group "audio". If you want to grant this right to one specific user you can replace @audio with the username of that user. Usually the limits.conf file contains some instructions on how to use it. Note that after modifying limits.conf and/or changing your group membership you must logout and then login again before any of this will take effect. $ useradd -G audio username $ sudo apt-get install linux-rt linux-headers-rt reiniciar i escollir el kernel RT en la tria $ unamme -r per comprovar que la prioritat està ben establerta: $ htop 5. Latència ----------- $ jackd -p1024 -t2000 -dalsa -dhw:2 -r44100 -p128 -n2 -P -Xseq ... JACK server starting in realtime mode with priority 90 ... creating alsa driver ... hw:2|-|128|2|44100|0|0|nomon|swmeter|-|32bit Using ALSA driver USB-Audio running on card 2 - EDIROL UA-25EX at usb-0000:00:1d.0-1.1, full speed configuring for 44100Hz, period = 128 frames (2.9 ms), buffer = 2 periods latència = (periodes * frames) / sample_rate = 256 / 44100 = 0,0058 = 5,8 msec 6. Preparar el sistema per a audio ---------------------------------- https://help.ubuntu.com/community/UbuntuStudioPreparation Ubuntu fresc Paquets importants: jacd, qjackctl Aplicacions que faràs servir: Ardour, fluidsynth, Zyn, jack-rack,vkeybd,... instal.lar repositori Medibuntu instal.lar ALSA instal.lar plugins d'efectes: LADSPA, DSSI instal.lar codecs de video Kernel rt: sudo apt-get install linux-rt linux-headers-rt Solucionar Pulseaudio (so a Gnome) Distribucions: Ubuntu Studio, CCRMA, Studio 64,... 7. Classificació programari --------------------------- DAW, seqüenciadors, editors d'àudio, sintetitzadors, plugins d'efectes, editors de partitures, caixes de ritmes, loops, utilitats http://www.jackaudio.org/applications http://www.linuxmao.org http://en.wikipedia.org/wiki/List_of_Linux_audio_software 8. exemples pràctics: cadena de clients JACK --------------------------------------------- * vkeybd + PHASEX + SooperLooper * Micròfon + Ardour (sessió de gravació) + jack-rack (efectes) 9. automatitzar les configuracions ----------------------------------- patchage, LASH, LADISH, scripting #!/bin/bash /usr/bin/jackd -t 2000 -dalsa -dhw:2,0 -r44100 -p256 -n2 -P & sleep 6 /usr/bin/fluidsynth -s -i -a jack /home/joan/soundfonts/Unison.SF2 & sleep 4 /usr/bin/vkeybd & sleep 4 jack_connect fluidsynth:l_00 system:playback_1 jack_connect fluidsynth:r_00 system:playback_2 aconnect 'Virtual Keyboard':0 'FLUID Synth':0--------------------------------------- 10. l'API de JACK: hola món audio i hola móm MIDI ------------------------------------------------- *Hola Món Audio (enviar un sinusoide a la targeta de so) http://dis-dot-dat.net/index.cgi?item=jacktuts/starting/playing_a_note $gcc -std=c99 -o playc `pkg-config --cflags --libs jack` playc.c $ ./playc tocar_do *Hola Món MIDI (enviar una nota MIDI a un sintetitzador) http://jack-audio-connection-kit.sourcearchive.com/documentation/0.118plus-psvn3796/midiseq_8c-source.html $ gcc -std=c99 -o jack_midiseq `pkg-config --cflags --libs jack` midiseq.c $ /usr/bin/fluidsynth -a jack -m jack 198_Yamaha_SY1_piano.sf2 $ jack_midiseq usage: jack_midiseq name nsamp [startindex note nsamp] ...... [startindex note nsamp] $ jack_midiseq Sequencer 44100 0 60 44100 0 64 44100 jack_set_process_callback (client, process, 0); que apareix en els codis que utiilitzen la API de JACK. Aquest callback significa que s'ha d'executar la funció process cada vegada que es requereixi. I es requereix cada vegada que tinc el buffer ple, quan es produeix la interrupció. 11. llistes de distribució -------------------------- * LAU, LAD: http://lad.linuxaudio.org/index.html * Ubuntu Studio mail list: https://lists.ubuntu.com/archives/ubuntu-studio-users/ * Ubuntu Forums > Ubuntu Studio: http://ubuntuforums.org/forumdisplay.php?f=335 * Els projectes tenen la seva pròpia llista: Ardour, fluid-dev,... * xat: canal #LAU a freenode.org 12. Conclusió. Música feta amb Linux i programari lliure -------------------------------------------------------- S'està en fase de producció. Es pot utilitzar Linux per a produir música i àudio en entorns professionals i amateurs. Música: http://lam.fugal.net/ http://wiki.linuxaudio.org/apps/categories/music_made_with_linux http://www.freesoftwareseries.org/ L'àmbit de les aplicacions àudio no són només per fer música: efectes de so, projectes multimèdia, art electrònic i media art, ... Hi ha aplicacions clients de JACK que a més de tractar l'àudio tracten el video: AVSynthesis, xjadeo Amb les API es pot integrar la funcionalitat JACK dins de qualsevol projecte software. Xuleta ------ the playback device "hw:0" is already in use $ sudo /sbin/alsa force-reload PS1="$ " per canviar d'espai de treball (workspace, escriptori): Ctrl+Alt+fletxa (dreta o esquerra)
recursos
Fitxer:Xerrada JACK.zip: fitxers de suport
{Autor}, octubre 2010