Linux Audio & Music

Da WikiLilis.

Introduzione

In questa pagina riassumiamo un pò di informazioni ed how-to sul sistema audio di Linux e sui migliori software FLOSS musicali. Sigle come ALSA/OSS/PULSEAUDIO/JACK/LDASPA/VST, MIDI etc. vi diverranno familiari ;). Inoltre daremo anche un pò di consigli pratici per coloro che si avvicinano per la prima volta a questo mondo. Prima di proseguire è utile richiamare alcuni concetti fondamentali.

PCM

Pulse Code Modulation è una modalità di rappresentazione in digitale di un segnale analogico. Nel mondo audio significa che un suono viene rappresentato da una sequenza di numeri che rappresentano l'altezza di una forma d'onda audio "misurata" con una certa frequenza. Nella scheda audio di un computer esistono chip (DAC ed ADC) che consentono di trasformare questi numeri in un segnale analogico (per la riproduzione tramite altoparlanti, cuffie, etc.) e viceversa (per registrare un suono attraverso la "line-in" ove possiamo collegare un dispositivo audio elettronico o un microfono). I nostalgici troveranno più familiare utilizzare il termine "campionare" piuttosto che "registrare". Molti dei programmi audiomusicali per PC trattano i suoni in modalità PCM, ossia manipolano campioni audio. Un pò come avveniva con i registratori a nastro multi traccia, la registrazione viene suddivisa in tracce costituite da campioni indipendenti. Il software e l'hardware, durante la riproduzione si preoccupano di miscelare in tempo reale le varie tracce. A seconda del numero di "canali" disponibili sulla scheda audio è possibile registrare su più tracce contemporaneamente (ad esempio con più microfoni collegati), oppure registrare i campioni singolarmente. Il massimo numero di tracce gestibili contemporaneamente è limitato dalla potenza dell'hardware in quanto il mix in tempo reale occupa la CPU in modo abbastanza intensivo.

MIDI

Musical Instrument Digital Interface è invece un protocollo standard per l'interconnessione tra strumenti musicali elettronici. Viene utilizzato per inviare/ricevere "messaggi" del tipo:

  • suona un LA della 5 ottava sul canale n. 1
  • cambia il tempo di esecuzione a 100bpm
  • attiva un suono di tromba sul canale n.3
  • etc.

Abbiamo strumenti generatori di eventi midi (come una tastiera) e strumenti che ricevono eventi midi per generare il suono vero e proprio (ad esempio un midi expander oppure un software specializzato, chiamati spesso strumenti VST). Un'insieme di eventi MIDI può essere raccolto in un file che rappresenta in un certo senso la "partitura" di un brano musicale. Uno strumento VST per generare un suono PCM può "sintetizzarlo", ossia generarlo "a volo" in base ad un algoritmo oppure può riprodurlo in base ad una serie di "campioni" pre-registrati. I suoni sintentizzati occupano poca memoria e molta CPU, non sempre sono molto fedeli ad i suoni della realtà pertanto sono utilizzati quasi sempre per "inventare" pad, synth, rumori particolari o altri suoni di tipo "elettronico". I suoni "campionati", invece sono molto più fedeli, anche se non possono raggiungere il realismo che si otterrebbe campionando l'intera esecuzione di un musicista. Tuttavia utilizzando tecniche ibride molto avanzate e manipolando opportunamente in tempo reale i campioni si ottengono risultati eccellenti.

PCM vs MIDI

Quando usare PCM e quando MIDI? dipende da molti fattori. In un contesto ideale avremmo uno studio di registrazione e diversi musicisti pronti ad eseguire il nostro brano musicale. Potremmo dunque semplicemente registrare una loro esecuzione "live" con una scheda audio multicanale ed ottenere già il nostro brano digitale. Non è detto però che questo sia un approccio conveniente, mentre potrebbe essere più utile registrare solo alcune tracce in "live", magari non contemporaneamente ed utilizzare MIDI per tutte le altre.

Registrando direttamente l'audio PCM avremo il massimo del realismo e conserveremo tutte le sfumature dell'esecuzione, oltre alla "fisicità" del suono stesso come ad esempio le risonanze ma anche il "respiro" del musicista nel caso di uno strumento a fiato etc. Il suono così prodotto però non sarà praticamente modificabile, non sarà possibile variare l'altezza della nota, la sua durata, etc. per apportare modifiche bisognerà necessariamente ricampionare una nuova sessione live del nostro strumento.

Registrando in MIDI invece avremo la possibilità di modificare in qualsiasi modo la sequenza degli eventi, sarà possibile quindi correggere eventuali errori, aggiungere/eliminare note, cambiare strumento etc. se utilizziamo un VST campionato di buona qualità otterremo comunque un risultato accettabile.

Ci sono dei casi in cui siamo vincolati a PCM, come nel caso della voce, o a MIDI, se ad esempio vogliamo aggiungere un pad sintetizzato al nostro brano musicale. Ci converrà, inoltre, usare MIDI se il nostro brano non è ancora ben definito e va ancora rivisto, per poi magari sostituire la traccia con un campionamento definitivo in PCM durante la fase di produzione finale, etc. etc. Saranno obiettivi, budget, esperienza ed esigenze del produttore a fare la scelta giusta.

Iniziamo adesso ad approfondire alcuni dettagli tecnici.

OSS

Open Sound System è il sistema audio originario di Linux, deprecato dalla versione del kernel 2.5 in poi, oramai in disuso, gestisce solo la modalità audio PCM, ma senza il supporto al mixing hardware di canali e soprattutto non implementa MIDI. Lo riportiamo qui solo per dovere di cronaca.

ALSA

Advanced Linux Sound Architecture, sostituisce (ma vah!) OSS dal kernel 2.5, è l'attuale cuore del sistema audio di Linux, il core risiede nel kernel, in userspace abbiamo una serie di utility e librerie che consentono ai programmi di emettere/registrare suoni PCM e gestisce il MIDI. ALSA *non ha* un audio server. Vediamo ora alcune operazioni che possono essere fatte con le alsa utility.

Alsa Utilities

Visualizzazione delle schede audio del sistema

aplay -l

es. di output

trattore Desktop # aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: ALC892 Analog [ALC892 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 1: ALC892 Digital [ALC892 Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 7: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 8: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 9: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

Nell'esempio si notano le due schede presenti sul sistema, una HDA Intel PCH che è la scheda embedded nella mother board del PC, ed una scheda HDA Nvidia che consente di "inviare" suoni attraverso HDMI al monitor o alla TV.

Visualizzazione delle PCM del sistema

aplay -L

esempio di output

null
    Discard all samples (playback) or generate zero samples (capture)
pulse
    PulseAudio Sound Server
sysdefault:CARD=PCH
    HDA Intel PCH, ALC892 Analog
    Default Audio Device
front:CARD=PCH,DEV=0
    HDA Intel PCH, ALC892 Analog
    Front speakers
surround21:CARD=PCH,DEV=0
    HDA Intel PCH, ALC892 Analog
    2.1 Surround output to Front and Subwoofer speakers
surround40:CARD=PCH,DEV=0
    HDA Intel PCH, ALC892 Analog
    4.0 Surround output to Front and Rear speakers
surround41:CARD=PCH,DEV=0
    HDA Intel PCH, ALC892 Analog
    4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=PCH,DEV=0
    HDA Intel PCH, ALC892 Analog
    5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=PCH,DEV=0
    HDA Intel PCH, ALC892 Analog
    5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=PCH,DEV=0
    HDA Intel PCH, ALC892 Analog
    7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
iec958:CARD=PCH,DEV=0
    HDA Intel PCH, ALC892 Digital
    IEC958 (S/PDIF) Digital Audio Output
hdmi:CARD=NVidia,DEV=0
    HDA NVidia, HDMI 0
    HDMI Audio Output
hdmi:CARD=NVidia,DEV=1
    HDA NVidia, HDMI 0
    HDMI Audio Output
hdmi:CARD=NVidia,DEV=2
    HDA NVidia, HDMI 0
    HDMI Audio Output
hdmi:CARD=NVidia,DEV=3
    HDA NVidia, HDMI 0
    HDMI Audio Output

Emissione di un suono di test con aplay

aplay /dev/urandom

possiamo indicare una PCM con il parametro -D, es

aplay -D hdmi /dev/urandom

Registrazione di un suono

arecord >nomesuono.raw

Visualizzazione degli strumenti midi generatori di eventi

arecordmidi -l

Visualizzazione degli strumenti midi ricevitori di eventi

aplaymidi -l

Collegamento/routing di due strumenti midi generatore/ricevitore

aconnect xxx:y zzz:w

Pulseaudio

Pulseaudio è (fondamentalmente) un audio server, ossia un daemon con cui le diverse applicazioni si interfacciano per inviare ricevere suoni PCM. Il daemon tipicamente utilizza ALSA per interfacciarsi con le schede audio aggiungendo caratteristiche avanzate al sistema audio, come la gestione del volume individuale per ogni applicazione, il resampling, la sincronizzazione, il cambio di dispositivo sonoro di input/output trasparente all'applicazione (es. passare dalle casse audio, alle cuffie bluetooth, etc.), l'invio di suoni ad altri PC sulla rete, etc.

Pulse audio è utilizzato in molte distribuzioni Linux ed è integrato in molte applicazioni a partire dai player multimediali, alla applet di sistema per la modifica della configurazione audio, etc.

utility a riga di comando

informazioni generali

pactl info
Server String: /tmp/pulse-2L9K88eMlGn7/native
Library Protocol Version: 30
Server Protocol Version: 30
Is Local: yes
Client Index: 12
Tile Size: 65472
User Name: root
Host Name: trattore
Server Name: pulseaudio
Server Version: 7.1
Default Sample Specification: s16le 2ch 44100Hz
Default Channel Map: front-left,front-right
Default Sink: alsa_output.pci-0000_00_1b.0.iec958-stereo
Default Source: alsa_input.pci-0000_00_1b.0.analog-stereo
Cookie: 6a1a:6a87

Lista cards, canali, porte, etc.

pactl list

n.b. non riporto l'output perchè molto lungo

pavucontrol

Pavucontrol è un gtk frontend per manipolare i volumi di pulseaudio.

JACK

Jack è un audio server di tipo "professionale". E' così chiamato perché è possibile collegare l'uscita di uno strumento all'ingresso di un'altro. Ad esempio possiamo collegare la linea in (il microfono) ad un effetto, poi l'uscita dell'effetto ad un programma di registrazione e l'uscita di questo ad un equalizzatore e poi alle casse... ma tutto in software ;) Jack fa tante cose, in particolare offre anche un meccanismo di trasmissione MIDI diverso da quello tradizionale offerto da ALSA che ci complica un pò la vita.

Installazione

gentoo

in gentoo la versione 2 di jack è disponibile nell'overlay "proaudio", è assolutamente consigliato installare questa versione in quanto ha il supporto dbus, questo fa in modo che avviando jack pulseaudio viene automaticament redirezionato e le applicazioni tradizionali continuano a funzionare.

emerge jack-audio-connection-kit

DSSI

DSSI è una API che che consente di interconnettere un programma audio ad uno strumento elettronico virtuale (es un campionatore, un sintetizzatore, etc.) pilotabile via MIDI

LDASPA

LDASPA è una API che consente di interconnettere un programma audio con un plugin di rielaborazione audio come ad esempio un effetto (riverbero, echo, distorsore, etc.)

Elenco dei software audio/musicali più importanti

Audacity

Un editor PCM stabile e maturo.

QJackCtl

Un' utility molto imporante che fornisce una GUI per pilotare jack. Consente inoltre di gestire graficamente le connessioni tra strumenti midi alsa e le connession tra prese MIDI di jack.

Timidity++

E' un ricevitore MIDI capace di riprodurre tutto il set completo di strumenti General MIDI, si ricorda che spesso nelle diverse distribuzioni Linux non viene installato per default.

Installazione su gentoo

emerge timidity++

per avviarlo:

/etc/init.d/timidity start

per avviarlo automaticamente all'avvio

rc-update add timidity default

verranno installati anche dei suoni 'eawpatches' da circa 36 megabyte, ma se ne possono installare degli altri con il comando:

emerge timidity-freepats

per attivarli va modificato il link simbolico in /usr/share/timidity

FluidSynth

Anche questo, come timidity è un ricevitore midi, ma specializzato su uno standard chiamato soundfont.

installazione su gentoo

emerge fluidsynth

per aggiungere un soundfont

emerge fluid-soundfont

attenzione, fluid-soundfount è molto grande, occupa 144mb, tenetelo presente se utilizzate pc con poche risorse

utilizzo

fluidsynth /usr/share/sounds/sf2/FluidR3_GM.sf2

Hydrogen

una drum machine che consente di creare pattern/song di batteria molto facilmente, pilotabile via MIDI

Vkeybd

Una tastiera virtuale MIDI.

Virtual Midi Piano Keyboard

Una tastiera virtuale MIDI più moderna e gradevole.

Jack Keyboard

Una tastiera midi che usa JACK al posto di ALSA.

a2jmidid

questo daemon riversa gli strumenti MIDI alsa negli strumenti midi di jack

LMMS

l'antagonista di logic o fruit loops libero

Rosegarden Music

un'ottimo editor/sequencer musicale con editor a matrice ed a pentagramma, gestisce tracce audio e midi

Ardour

Software di registrazione multitraccia professionale.

QJackMMC

Utility che ascolta messaggi MIDI Jack MMC (multimedia machine controle) e li invia a jack transport, consentendo dunque di sincronizzare start, stop, etc. da ardour.

Festige

Festige consente di utilizzare in Linux vst scritti per Windows

Strumenti VST più imporanti

Per Windows (utilizzabili via festige)

Come fare per

Testare timidity++ con la tastiera virtuale

Avviare timidity, avviare vkeybd, avviare qjackctl e connettere vkeybd a timidity. Clickare su qualche tasto, se tutto funziona correttamente udiremo il suono delle note.

Testare fluidsynth con la tastiera virtuale

Avviare fluidsynth, avviare vkeybd, avviare qjackctl e connettere vkeybd a fluidsynth. Clickare su qualche tasto, se tutto funziona correttamente udiremo il suono delle note. è possibile usare qsynth per pilotare fluidsynth in modo molto comodo

Sincronizzare il midi clock di rosegarden ed hydrogen

Nei settaggi di rosegarden alla voce "Comportamento" flaggare "usa trasporto jack"