Llista diapositives
===================
0. Portada
1. Audio amb Linux: avantatges i inconvenients
2. ALSA: Advanced Linux Sound Architecture
3. JACK: JACK Audio Connection Kit
4. Kernel RT i variants
5. Latència
6. Preparar el sistema per a audio
7. Classificació prgramari (reproductors, editors d'audio, DAW, seqüenciadors, sintetitzadors, utilitats,...)
8. Exemples pràctics. Cadena de clients JACK
*vkeybd + PHASEX + SooperLooper
*sessió de gravació amb Ardour + jack-rack
9. automatitzar les configuracions
10. l'API de JACK: hola món audio i hola móm MIDI
11. llistes de distribució i suport
12. Conclusió. Música feta amb Linux i programari lliure


Guió 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="$ "

