Linux sul pc "delle radio" - l'audio
Tra i tanti motivi che mi hanno fatto scegliere Linux come
piattaforma preferenziale nello shack ci sono la semplicità con cui
vengono gestiti device multipli e la consapevolezza che di solito si
può metter mano al software per adattarlo alle situazioni che si
possono venire a creare. Nello specifico la mia esigenza del tempo era
quella di un server che potesse controllare da remoto uno o più
ricevitori e fare lo streaming dell'audio, tutto questo mentre il pc
continuava a poter essere impiegato in locale. I test con Windows non
diedero risultati soddisfacenti nella gestione di diverse porte seriali
e schede audio in contemporanea mentre girava
il robottino IRC, così mi attestai sul pinguino, che fino a quel momento avevo testato sporadicamente.
Il problema di Linux, lo sanno tutti quelli che ci sono passati, è che
ha un potenziale enorme ma talvolta attività che diamo per scontate
possono rivelarsi un incubo.
La gestione dell'audio è tra queste.
Il modello a bazar di sviluppo significa che iognuno va per la propria
strada, a volte le scelte sono dettate da crociate ideologiche e se il
tuo hardware non è tra i più diffusi scovare la soluzione può essere
molto complicato. Si viene rimandati a manuali e procedure vecchi di
anni in cui metà dei riferimenti non sono più validi, passando per
bug-reports bellamente ignorati dagli sviluppatori in favore di
sviluppi più fighi in mezzo ad una giungla in cui ogni installazione è
sostanzialmente diversa dall'altra, quindi la stessa soluzione può
benissimo non essere adatta a tutti.
Dopo anni di pesantissime imprecazioni sono comunque giunto ad una
certa stabilità, con le mie tre schede funzionanti su Ubuntu 10.04LTS.
Alcuni passaggi cruciali sono stati:
- fare in modo che tutte le schede fossero riconosciute e gestite
nello specifico la scheda integrata
sulla motherboard, riconosciuta come "HDA VIA VT82xx" crea problemi con
alcune versioni di kernel, neanche troppo recenti. Si tratta di un bug
riconosciuto e mai curato ufficialmente. Mesi di ricerche hanno portato
alla soluzione implementando almeno questi due passaggi:
- usare il modulo patchato di David Henningson che si trova in questa discussione
- inserire nelle opzioni di boot del kernel il parametro aggiuntivo pci=use_crs ecco come:
aprire, come root, il file che presenta le opzioni di boot: /boot/grub/grub.cfg
cercare verso la metà del testo i blocchi che definiscono
le diverse versioni di kernel in uso sulla macchina e aggiungere il
parametro in coda alla riga che inizia con "linux":
menuentry 'Ubuntu, con Linux 3.0.4oss3' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
set gfxpayload=$linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set=root bd7db985-74ae-450a-b4e6-50bd61e99ad2
linux /boot/vmlinuz-3.0.4oss3
root=UUID=bd7db985-74ae-450a-b4e6-50bd61e99ad2 ro
crashkernel=384M-2G:64M,2G-:128M quiet splash vt.handoff=7 pci=use_crs
initrd /boot/initrd.img-3.0.4oss3
Questa non è la procedura ideale in quanto il
parametro aggiuntivo decade tutte le volte che Grub viene aggiornato,
in concomitanza con l'installazione di un nuovo kernel. Tant'è al
momento non ricordo quale fosse il modo corretto di farlo, questo
funziona e non c'è bisogno di metterci le mani così spesso. Quindi a me
basta.
- modificare nei parametri di bios l'allocazione di memoria alla scheda video (256mb iso 128)
- allo stesso indirizzo corrispondesse sempre la stessa scheda audio
se non viene imposto diversamente,
infatti, ad ogni boot in presenza di più schede le carte si mescolano.
Quindi una volta /dev/dsp1 corrisponde alla scheda integrata sulla
motherboard, la volta successiva magari a quella esterna USB.
Chiaramente in questo modo è un fastidio perché non si può mai contare
su un setup affidabile.
Si risolve specificando ad Alsa l'ordine in cui caricare i driver. Ecco come:
Aprire come root il file /etc/modprobe.d/alsa-base.conf
Aggiungere a fianco dei moduli impiagati dalle proprie schede (al fondo del file) l'ordine desiderato attraverso il parametro index:
options snd-cmipci mpu_port=0x330 fm_port=0x388 index=0
options snd-via82xx index=1
options snd-hda-intel index=2
options snd-usb-audio index=3
Riavviare Alsa.
- avere chiaro come gestire ingressi e livelli
Il pannellino di controllo dei livelli sotto Gnome serve
a selezionare quali schede audio debbano essere attive (per esempio ho
"spento" quella integrata nell'uscita HDMI della scheda audio) e quali
debbano gestire i livelli di ingresso (microfono) e uscita (speaker) di
default.
Per avere il pieno controllo su tutte le entrate ed uscite, è bene invece ricorrere ad alsamixer
L'impiego dello strumento è intuito:
con gli slider si può controllare se ogni ingresso/uscita debba essere
attivato e con quale livello di ingresso/uscita.
Molto spesso quando si ha l'impressione che la scheda audio non
funzioni correttamente è perché la voce specifica è disattivata oppure
a livello zero.
I comandi principali per selezionare su quale scheda operare e se
"riproduzione" o "registrazione" sono riportati direttamente sulla
schermata dell'applicativo, sicché c'è poco da dire.
La scomparsa di /dev/dsp
Con il rilascio di Ubuntu 10.10 gli sviluppatori hanno avuto l'alzata
d'ingegno di eliminare il supporto per OSS o, come si dice nel loro
linguaggio, "deprecarlo".
Il motivo è tutt'altro che ovvio: da una parte dicono di averlo fatto
perché complicava lo sviluppo di altre parti (OSSp... che però non
veniva distribuito nello stesso rilascio!), dall'altra perchè "era ora
di superare OSS con tutti i suoi difetti", tant'è hanno lasciato in
braghe di tela tutti coloro che fino al giorno prima usavano software
non più soggetto a sviluppo attivo e che richiede espressamente la
storica architettura audio.
Questo non ha ripercussioni solo sui pochi che usano DSD, MultiMon e
qualche altro software che non dispone di sostituti, ma anche la
comunità ben più ampia di chi abbia giochi non open source e utenti di
applicazioni multimediali di non ultimissima generazione.
Esistono alcuni workaround (per esempio
padsp) che però non funzionano con tutti i pacchetti.
Per averci provato ed essermene pentito,
non raccomando di seguire la
strada della rimozione di PulseAudio/Alsa e loro sostituzione con OSS4
come suggerito in alcuni blog. La mia esperienza è che ci si troverà
con limiti di natura diversa e, nel complesso, analogo risultato netto.
Il desktop di Ubuntu infatti è ricco di interdipendenze e la rimozione
dei due pacchetti lascia sempre qualche ferito sul campo (ovvero
applicazioni non funzionanti). Inoltre OSS4 sembra avere ancora qualche
problema con le periferiche USB, quindi chiude nettamente alcune strade
come quella del FunCube Dongle.
Fortunatamente in Linux possiamo ricostruirci come vogliamo il sistema
operativo. Quando ho iniziato a smanettare sulle prime distribuzioni,
con le Slackware e Red Hat dei prmi anni '90, la compilazione del
kernel non solo era procedura normale se si voleva che tutto l'hardware
funzionasse, ma in ogni caso raccomandata per non portarsi dietro pezzi
di codice che avrebbero sprecato risorse. Se le distribuzioni moderne
hanno reso Linux molto più user friendly, è vero che al tempo stesso la
connotazione "fai da te" diminuisce, con file di configurazione
automatici orribilmente complicati e composti a loro volta da script
automatici.
Per avre indietro i nostri /dev/dsp occorre ricompilare il kernel
prevedendo il supporto per OSS. Ecco come ho fatto su Ubuntu 10.10 e
11.10:
- scaricare gli strumenti necessari alla compilazione:
sudo
apt-get
install
fakeroot kernel-wedge build-essential makedumpfile kernel-package libncurses5 libncurses5-dev
sudo
apt-get build-dep --no-
install
-recommends linux-image-$(
uname
-r)
- creare una cartella dedicata e scaricarci i sorgenti relativi al kernel che si sta impiegando;
mkdir
~/
source
cd
~/
source
apt-get
source
linux-image-$(
uname
-r)
cd <directory della versione di kernel scaricata>
- lanciare il sistema di configurazione a menù con
make menuconfig
- andare ne sottomenù Device Drivers > Sound card support impostare:
- [*] Preclaim OSS device numbers
- dentro ad Advanced Linux Sound Architecture:
<M> Sequencer support
<M> Sequencer dummy client
<M> OSS Mixer API
<M> OSS PCM (digital audio) API
[*] OSS PCM (digital audio) API - Include plugin system
[*] OSS Sequencer API
- dentro a Open Sound System DEPRECATED
<M> OSS sound modules
- uscire dal sistema di configurazione
- ripulire eventuali build parziali da esperimenti precedenti:
make
-kpkg clean
- procurare di avere qualcosa da fare nei prossimi XX minuti (da
alcune decine a qualche ora a seconda di quanto è potente il vostro pc)
- avviare la compilazione:
fakeroot
make
-kpkg --initrd --append-to-version=-QD kernel-image kernel-headers
il "-QD" evidenziato è una stringa a
vostro piacimento che consenta di distinguere il kernel così compilato
da quello fornito di serie. Non possono essere impiegati tutti i
caratteri, ma occorre limitarsi agli alfanumerici.
- Una volta completata la compilazione occorre salire di un livello
nelle directory e troveremo due pacchetti .deb pronti da installare.
Quindi;
cd
~/
source
sudo
dpkg -i linux-image-[qualcosa che dipende dalla versione e dall'identificatore che ci avete messo].deb
sudo
dpkg -i linux-headers-
[qualcosa che dipende dalla versione e dall'identificatore che ci avete messo].deb
Naturalmente il nome esatto dei due file .deb da installare può essere appurato chiedendo la lista dei file con ls
- Creare il file necessario al boot. La parte in blu deve essere
mutuata dal numero di versione e nome del kernel che avete compilato:
sudo
update-initramfs -c -k 2.6.35+QD
- Aggiornare il sistema di selezione del kernel da lanciare
all'avvio del pc. Nella prima parte della pagina abbiamo visto come
intervenire per modificare il parametro di lancio (pci=use_crs) se necessario, visto che ora il file verrà rigenerato completamente, perdendo le modifiche precedenti.
sudo
update-grub
A questo punto dovremmo disporre degli agognati dispositivi.
sinager@SIRAD:~$ ls /dev/dsp*
/dev/dsp /dev/dsp1 /dev/dsp3
sinager@SIRAD:~$
Ho anche installato dal repository oss-compat : non sono sicuro al 100% se serva, ma a me l'ambaradan adesso funziona con tutti i vecchi pacchetti.
Contact:
Pubblicato: Nov 2011 - Home