Guida ad ALSA su Gentoo Linux
1.
Introduzione
Che cos'è ALSA?
ALSA, Advanced Linux Sound Architecture, fornisce le funzionalità audio e
MIDI (Musical Instrument Digital Interface) al sistema operativo Linux.
ALSA è il sottosistema audio predefinito nei kernel 2.6 e sostituisce OSS
(Open Sound System), usato nei kernel 2.4.
Le principali caratteristiche di ALSA includono un supporto efficiente per tutti
i tipi di interfacce audio, da quelle normali a quelle professionali, driver
totalmente modularizzati, supporto SMP e al multi-threading, retro-compatibilità
con OSS e una libreria per gli utenti, alsa-lib, per facilitare la
programmazione delle applicazioni.
ALSA su Gentoo
In passato, Gentoo offriva due modalità per far funzionare ALSA: il driver
interno al kernel e il pacchetto esterno alsa-driver. Le due
soluzione facevano essenzialmente la stessa cosa; ciò rendeva il supporto al
pacchetto esterno estremamente difficoltoso e dispendioso in termini di tempo.
I mantenitori di Gentoo hanno deciso di rendere discontinuo il supporto per il
pacchetto alsa-driver, concentrando le loro risorse sui driver ALSA
disponibili all'interno del kernel Linux.. Questa guida si focalizzerà
solamente sulla configurazione di ALSA tramite i driver interni al kernel.
Se si necessita ancora del pacchetto alsa-driver si prega di mandare
un'e-mail ai mantenitori di ALSA in
Gentoo con la spiegazione del perché i driver interni al kernel non
vanno nel proprio sistema. Assicurarsi di includere i log di errore dettagliati.
2.
Installare ALSA
Prima di proseguire
Come prima cosa è necessario sapere quali sono i driver necessari per la propria
scheda sonora. Nella maggior parte dei casi, le schede sonore (integrate e di
altro tipo) sono basate su PCI e lspci vi aiuterà nella ricerca delle
informazioni. Effettuare l'emerge di sys-apps/pciutils per ottenere
lspci, se non è già installato. Se si ha una scheda sonora USB,
lsusb da sys-apps/usbutils potrebbe essere di aiuto. Per
schede ISA, provare ad usare sys-apps/isapnptools. Le seguenti pagine
potrebbero aiutare gli utenti con schede sonore basate ISA:
Nota:
Per facilità di uso/spiegazione, nel resto della guida si assume di avere una
scheda sonora PCI
|
A questo punto si devono rilevare i dettagli della scheda sonora.
Codice 2.1: Dettagli della scheda sonora |
# lspci -v | grep -i audio
0000:00:0a.0 Multimedia audio controller: Creative Labs SB Live! EMU10k1 (rev 06)
|
Ora si sa che la scheda sonora è una Sound Blaster Live! della Creative Labs.
Andare in ALSA
Soundcard Matrix e selezionare Creative Labs dall'elenco, per spostarsi
nella pagina contenente l'elenco delle schede audio Creative Labs supportate;
dall'elenco si può vedere che la SB Live! usa il modulo emu10k1. Questa è
l'informazione che servirà successivamente. Per ulteriori informazioni, cliccare
sul collegamento a fianco della voce "Details" per andare nella pagina delle
specifiche per emu10k1.
Se si vuole utilizzare il supporto MIDI, aggiungere midi alle flag USE in
/etc/make.conf prima di emergere qualsiasi pacchetto ALSA. In una
parte successiva della guida verrà mostrato come configurare il supporto MIDI.
Configurare il kernel
Nota:
Dal rilascio 2005.0, Gentoo Linux usa il 2.6 come kernel predefinito.
Controllare se il proprio kernel è della serie 2.6. Questo metodo non
funzionerà con un kernel 2.4.
|
Configurare il kernel per abilitare ALSA.
Importante:
Gli utenti che hanno usato genkernel dovrebbero eseguire genkernel
--menuconfig all e poi seguire le istruzioni in Opzioni del kernel per ALSA.
|
Codice 2.2: Entrare nei sorgenti |
# cd /usr/src/linux
# make menuconfig
|
Nota:
L'esempio sopra presuppone che il collegamento simbolico
/usr/src/linux punti ai sorgenti del kernel che si desidera
utlizzare. Assicurarsi che sia così prima di continuare.
|
Verranno viste alcune delle opzioni da abilitare nel kernel 2.6 per ottenere un
supporto ALSA appropriato per la propria scheda sonora.
È da notare che, per praticità, tutti gli esempi mostrano ALSA compilato come
modulo. E' consigliato seguire questa impostazione poichè in seguito permetterà
l'utilizzo di alsaconf, strumento assai utile per configurare la scheda.
Non saltare la sezione Configurazione di
questo documento. Se si vogliono mantenere le opzioni compilate staticamente nel
kernel, modificare la configurazione di conseguenza.
Codice 2.3: Opzioni del kernel per ALSA |
Device Drivers --->
Sound --->
<M> Sound card support
Open Sound System --->
< > Open Sound System (DEPRECATED)
Advanced Linux Sound Architecture --->
<M> Advanced Linux Sound Architecture
<M> Sequencer support
<M> OSS Mixer API
<M> OSS PCM (digital audio) API
Generic devices --->
ISA devices --->
<M> Gravis UltraSound Extreme
PCI devices --->
<M> Emu10k1 (SB Live!, Audigy, E-mu APS)
<M> Intel/SiS/nVidia/AMD/ALi AC97 Controller
<M> VIA 82C686A/B, 8233/8235 AC97 Controller
USB Devices --->
|
Dopo aver impostato le opzioni si può (ri)compilare il kernel: il supporto ALSA
per la propria scheda dovrebbe funzionare dopo il riavvio. Non dimenticarsi di
aggiornare la configurazione di GRUB per usare il nuovo kernel. Procedere con
la sezione ALSA Utility e verificare se tutto
funziona.
3.
Configurare/Testare ALSA
ALSA Utility
alsa-utils è una parte integrante di ALSA e contiene diversi programmi
molto utili, inclusi gli script di avvio ALSA; eer questi motivi ne viene
caldamente raccomandata l'installazione.
Codice 3.1: Installare alsa-utils |
# emerge alsa-utils
|
Nota:
Se ALSA non è stato compilato come modulo, procedere alla sezione Script di avvio ALSA. Le restanti persone avranno
bisogno di configurare ALSA, compito facilitato dallo strumento alsaconf,
fornito da alsa-utils.
|
Configurazione
Versioni recenti di udev (>=udev-103) forniscono una specie di
autoconfigurazione delle scheda sonora a livello kernel. Affidarsi, se
possibile, alla configurazione automatica della scheda sonora da parte del
kernel. Altrimenti usare alsaconf per configurare la propria scheda, come
mostrato di seguito.
Nota:
Chiudere i programmi che potrebbero accedere alla scheda sonora mentre
si esegue alsaconf.
|
Per configurare la propria scheda sonora digitare alsaconf in una shell
come utente root.
Codice 3.2: Aprire alsaconf |
# alsaconf
|
Si entrerà in un'interfaccia a menù guidata che controllerà i dispositivi,
cercando di individuare la scheda sonora, la cui selezione verrà proposta
tramite un elenco. Successivamente verrà chiesta l'autorizzazione per effettuare
i cambiamenti necessari a /etc/modprobe.d/alsa.conf. Infine verrà
impostato il volume in modo adeguato, eseguito update-modules ed avviato
il servizio /etc/init.d/alsasound. Dopo la chiusura di
alsaconf, si può procedere con l'impostazione dello script di avvio ALSA.
Script di avvio ALSA
A questo punto è quasi tutto configurato. A prescindere dalla modalità di
installazione di ALSA, è necessario avere uno strumento per caricare i moduli o
inizializzare ALSA e ripristinare le impostazioni del volume all'avvio del
sistema. Lo script di avvio ALSA gestisce tutto questo ed è chiamato
alsasound. Aggiungerlo al runlevel di boot.
Codice 3.3: Aggiungere ALSA al runlevel di boot |
# rc-update add alsasound boot
* alsasound added to runlevel boot
* rc-update complete.
|
Controllare il file /etc/conf.d/alsasound e assicurarsi che la
variabile SAVE_ON_STOP sia impostata a yes. Questa opzione salva le impostazioni
sonore all'arresto del sistema.
Gruppo audio
C'è ancora una cosa importante da impostare. Una regola nei sistemi
operativi *nix è quella di non eseguire qualcosa come root se non strettamente
necessario, ed è naturalmente applicabile anche in questo caso. Per la maggior
parte del tempo si utilizzerà il sistema come utente non privilegiato: nel caso
si volesse ascoltare musica o accedere alla scheda sonora, sarà necessario
appartenere al gruppo "audio". Per evitare problemi di permessi nell'accesso
alle periferiche audio, aggiungere gli utenti al gruppo audio, utilizzando
gpasswd da utente root.
Codice 3.4: Aggiungere utenti al gruppo audio |
# gpasswd -a <nomeutente> audio
Adding user <nomeutente> to group audio
|
Controllare il volume
Avviare ALSA. Se è stato eseguito alsaconf si può saltare questo passo.
Codice 3.5: Fare partire il servizio |
# /etc/init.d/alsasound start
|
Controllare il volume poichè in certi casi è muto. Per fare ciò usare
alsamixer.
Codice 3.6: Eseguire alsamixer |
# alsamixer
|
ALSA Mixer dovrebbe mostrarsi così la prima volta che viene eseguito.
Attenzione ai canali Master e PCM che hanno un MM. Significa che sono muti. Se
si prova a ascoltare qualcosa con alsamixer in questo stato non si
sentirà nulla.
Figura 3.1: Finestra principale di Alsa Mixer, Muto |
 |
Togliere il muto ai canali, e impostare il volume al livello desiderato.
Avvertenza:
Entrambi i canali Master e PCM devono essere attivati e impostati ad un
livello di volume udibile per ascoltare qualche suono dalle proprio casse.
|
-
Per spostarsi tra i canali usare i tasti sinistra e destra.
(<-&->)
-
Per cambiare il livello mute, spostarsi sul canale specifico, per esempio
Master, e premere il tasto m.
-
Per aumentare e diminuire il livello di volume, usare i tasti sù e giù.
Nota:
Attenzione a impostare i valori Bass e Treble. 50 è un buon numero per tutte e
due. Alti valori di Bass potrebbero causare delle vibrazioni nelle casse,
pericolose nel caso in cui quest'ultime non siano progettate per gestirle
adeguatamente.
|
ALSA Mixer dovrebbe essere simile alla figura sottostante. Notare 00 invece di
MM ed i livelli di volume impostati a valori ottimali.
Figura 3.2: Alsa Mixer pronto |
 |
Controllare il suono
È ora di sentire qualche canzone. Un modo veloce è quello di usare strumenti a
riga di comando come media-sound/madplay. È possibile usare anche
mpg123.Se si è fan di ogg, usare ogg123 fornito da
media-sound/vorbis-tools. È comunque possibile utilizzare il lettore
audio più consono alle proprie necessità, basta emergere quello
desiderato.
Codice 3.7: Ottenere il software |
# emerge madplay mpg123
# emerge vorbis-tools
|
Ora è possibile ascoltare la propria canzone preferita.
Codice 3.8: Ascoltare musica |
# madplay -v /mnt/shyam/Music/Paul\ Oakenfold\ -\ Dread\ Rock.mp3
MPEG Audio Decoder 0.15.2 (beta) - Copyright (C) 2000-2004 Robert Leslie et al.
Title: Dread Rock
Artist: Paul Oakenfold
Album: Matrix Reloaded
Year: 2003
Genre: Soundtrack
Soundtrack
00:04:19 Layer III, 160 kbps, 44100 Hz, joint stereo (MS), no CRC
# ogg123 Paul\ Oakenfold\ -\ Dread\ Rock.ogg
Audio Device: Advanced Linux Sound Architecture (ALSA) output
Playing: Paul Oakenfold - Dread Rock.ogg
Ogg Vorbis stream: 2 channel, 44100 Hz
Genre: Soundtrack
Transcoded: mp3;160
Title: Dread Rock
Artist: Paul Oakenfold
Date: 2003
Album: Matrix Reloaded
Time: 00:11.31 [04:28.75] of 04:40.06 (200.6 kbps) Output Buffer 96.9%
|
ALSA e USE
Per abilitare il supporto ALSA alle applicazioni che ne fanno uso, è possibile
aggiungere la flag USE alsa a /etc/make.conf. Architetture
come x86 e amd64 hanno la flag abilitata in modo predefinito.
Problemi?
Se per qualche ragione il sonoro non dovesse funzionare, la prima cosa da
controllare sono le impostazioni di alsamixer.
L'80% dei problemi si risolvono perchè i canali erano muti o il volume era
basso. Controllare anche gli applet del proprio Window Manager e verificare che
i volumi siano impostati a livelli accettabili.
/proc e /proc/asound sono ulteriori fonti di
informazioni da controllare.
Codice 3.9: /proc/asound |
# cat /proc/asound/cards
0 [Live ]: EMU10K1 - Sound Blaster Live!
Sound Blaster Live! (rev.6, serial:0x80271102) at 0xb800, irq 11
# cat /proc/asound/version
Advanced Linux Sound Architecture Driver Version 1.0.8 (Thu Jan 13 09:39:32 2005 UTC).
# cat /proc/asound/oss/sndstat
Sound Driver:3.8.1a-980706 (ALSA v1.0.8 emulation code)
Kernel: Linux airwolf.zion 2.6.11ac1 #2 Wed May 4 00:35:08 IST 2005 i686
Config options: 0
Installed drivers:
Type 10: ALSA emulation
Card config:
Sound Blaster Live! (rev.6, serial:0x80271102) at 0xb800, irq 11
Audio devices:
0: EMU10K1 (DUPLEX)
Synth devices: NOT ENABLED IN CONFIG
Midi devices:
0: EMU10K1 MPU-401 (UART)
Timers:
7: system timer
Mixers:
0: SigmaTel STAC9721/23
|
Altro errore comune è il messaggio "Unknown symbol in module". Un esempio è
mostrato di seguito.
Codice 3.10: Errore Unknown symbol in module |
# /etc/init.d/alsasound start
* Loading ALSA modules ...
* Loading: snd-card-0 ... [ ok ]
* Loading: snd-pcm-oss ...
WARNING: Error inserting snd_mixer_oss
(/lib/modules/2.6.12-gentoo-r6/kernel/sound/core/oss/snd-mixer-oss.ko): Unknown
symbol in module, or unknown parameter (see dmesg) FATAL: Error inserting
snd_pcm_oss
(/lib/modules/2.6.12-gentoo-r6/kernel/sound/core/oss/snd-pcm-oss.ko): Unknown
symbol in module, or unknown parameter (see dmesg)
[ !! ]
* Loading: snd-mixer-oss ...
FATAL: Error inserting snd_mixer_oss
(/lib/modules/2.6.12-gentoo-r6/kernel/sound/core/oss/snd-mixer-oss.ko): Unknown
symbol in module, or unknown parameter (see dmesg)
[ !! ]
* Loading: snd-seq ... [ ok ]
* Loading: snd-emu10k1-synth ... [ ok ]
* Loading: snd-seq-midi ... [ ok ]
* Restoring Mixer Levels ... [ ok ]
|
Quando si guarda dmesg si vede:
Codice 3.11: dmesg output |
# dmesg | less
ACPI: PCI Interrupt 0000:02:06.0[A] -> Link [APC3] -> GSI 18 (level, low) -> IRQ 209
snd_mixer_oss: Unknown symbol snd_unregister_oss_device
snd_mixer_oss: Unknown symbol snd_register_oss_device
snd_mixer_oss: Unknown symbol snd_mixer_oss_notify_callback
snd_mixer_oss: Unknown symbol snd_oss_info_register
snd_pcm_oss: Unknown symbol snd_unregister_oss_device
snd_pcm_oss: Unknown symbol snd_register_oss_device
snd_pcm_oss: Unknown symbol snd_mixer_oss_ioctl_card
snd_pcm_oss: Unknown symbol snd_oss_info_register
snd_mixer_oss: Unknown symbol snd_unregister_oss_device
snd_mixer_oss: Unknown symbol snd_register_oss_device
snd_mixer_oss: Unknown symbol snd_mixer_oss_notify_callback
snd_mixer_oss: Unknown symbol snd_oss_info_register
|
Il problema è causato dal passaggio da alsa-driver ad ALSA nel kernel
perchè quando si toglie alsa-driver i moduli sono protetti dalla
cancellazione per cui vengono preservati. Quando si passa ai driver nel kernel,
eseguendo modprobe viene rilevato un miscuglio tra i moduli di
alsa-driver e del kernel, causando gli errori sopraccitati.
La soluzione è abbastanza semplice. Si deve rimuovere manualmente il problema
a seguito della rimozione di alsa-driver. Assicurarsi di rimuovere la
versione del kernel corretta e non quella corrente!
Codice 3.12: Rimuovere i moduli di alsa-driver |
# rm -rf /lib/modules/$(uname -r)/alsa-driver
|
Un'altra causa di messaggi di errore simili a quello appena visto potrebbe
essere un file in /etc/modprobe.d che fornisce un parametro
device_mode quando esso non è richiesto. Verificare che il problema
dipenda da ciò ed individuare il file colpevole.
Codice 3.13: Conferma e ricerca di device_mode |
# dmesg | grep device_mode
snd: Unknown parameter `device_mode'
# grep device_mode /etc/modprobe.d/*
|
Solitamente è un file chiamato alsa contenente la riga options
snd device_mode=0666. Rimuovere questa riga e riavviare il servizio
alsasound per risolvere questo problema.
4.
Altre cose
Impostare il supporto MIDI
Per prima cosa assicurarsi di abilitare la flag USE midi
in/etc/make.conf, se non è già stato fatto in precedenza. Bisognerà
ri-emergere ogni pacchetto ALSA contenente la flag midi, come
alsa-lib, alsa-utils e alsa-driver.
Se la propria scheda sonora ha un sintetizzatore MIDI, per ascoltare i file .mid
bisogna installare awesfx, ovvero un insieme di programmi per controllare
il driver AWE32. Per prima cosa è necessario installarlo. Se non si ha un
sintetizzatore hardware si può usarne uno virtuale. Vedere la sezione Sintetizzatore virtuale per ulteriori informazioni.
Codice 4.1: Installare awesfx |
# emerge awesfx
|
Nota:
Copiare i file SoundFont (SF2) dal CD con i driver della scheda sonora o da una
installazione Windows in /usr/share/sounds/sf2/. Per esempio un
file di font audio per la scheda Creative SBLive! potrebbe essere 8MBGMSFX.SF2.
|
Dopo aver copiato i file Soundfont, si può ascoltare un file midi. Ino
ltre è possibile aggiungere il comando asfxload in
/etc/conf.d/local.start, per caricare automaticamente il font audio
ad ogni avvio del sistema.
Nota:
Il percorso /mnt mostrato qui di seguito potrebbe non essere
uguale a quello sulla propria macchina. E' solo un esempio. Cambiare il percorso
in base alle proprie opzioni.
|
Codice 4.2: Caricare Soundfonts |
# cp /mnt/win2k/Program\ Files/CreativeSBLive2k/SFBank/8MBGMSFX.SF2 /usr/share/sounds/sf2/
# cp /mnt/cdrom/AUDIO/ENGLISH/SFBANK/8MBGMSFX.SF2 /usr/share/sounds/sf2/
# asfxload /usr/share/sounds/sf2/8MBGMSFX.SF2
|
Si possono ascoltare i file midi con un programma come
aplaymidi. Eseguire aplaymidi -l per avere
la lista delle porte disponibili e selezionarne una per ascoltare il file.
Codice 4.3: Ascoltare un MIDI |
# aplaymidi -l
Port Client name Port name
64:0 EMU10K1 MPU-401 (UART) EMU10K1 MPU-401 (UART)
65:0 Emu10k1 WaveTable Emu10k1 Port 0
65:1 Emu10k1 WaveTable Emu10k1 Port 1
65:2 Emu10k1 WaveTable Emu10k1 Port 2
65:3 Emu10k1 WaveTable Emu10k1 Port 3
# aplaymidi --port=65:0 /mnt/shyam/music/midi/mi2.mid
|
Sintetizzatore virtuale
Se la propria scheda sonora non ha un sintetizzatore hardware, è possibile
utilizzare timidity++.
Codice 4.4: Installare timidity++ |
# emerge timidity++
|
Timidity, per funzionare, ha bisogno di un font audio . Fortunatamente, l'ebuild
ne installerà automaticamente alcuni. Ci sono altri pacchetti di font
disponibili in Portage, tra cui timidity-freepats e
timidity-eawpatches. Si possono avere varie configurazioni di font audio
installate,e posizionare le proprie in /usr/share/timidity/. Per
passare da una configurazione ad un'altra, usare eselect.
Codice 4.5: Cambiare la configurazione |
# eselect timidity list
# eselect timidity set eawpatches
|
Non dimenticarsi di aggiungere timidity al runlevel di default.
Codice 4.6: Aggiungere timidity al runlevel di default |
# rc-update add timidity default
# /etc/init.d/timidity start
|
Ora si può provare ad ascoltare i file MIDI.
Strumenti e firmware
Alcune schede audio possono beneficiare di alcuni strumenti forniti dai
pacchetti alsa-tools e alsa-firmware. È possibile installare
entrambi tramite un semplice emerge.
Codice 4.7: Installare ALSA Tools |
# emerge alsa-tools
|
Schede audio multiple
È possibile gestire contemporaneamente più schede audio nel proprio sistema,
grazie alla compilazione modulare di ALSA nel kernel. Basta specificare quale
dev'essere avviata per prima tramite il file
/etc/modprobe.d/alsa.conf. In questo file le schede sono
identificate tramite i nomi dei corrispondenti driver. 0 è la prima scheda, 1 la
seconda, e così via. Viene proposto un esempio per un sistema con due schede
sonore.
Codice 4.8: Due schede sonore in /etc/modprobe.d/alsa.conf |
options snd-emu10k1 index=0
options snd-via82xx index=1
|
Oppure, se si hanno due schede che utilizzano lo stesso driver, si può
specificarle entrambe sulla stessa riga, usando numeri separati da virgole.
Viene mostrato un esempio per un sistema con tre schede sonore, due delle quali
sono la stessa scheda Intel High Definition Audio.
Codice 4.9: Schede sonore multiple in /etc/modprobe.d/alsa.conf |
options snd-ymfpci index=0
options snd-hda-intel index=1,2
|
Plugin
È possibile installare dei plugin per ottenere funzionalità aggiuntive.
alsa-plugins è una collezione di utili plugin, che include:
uscita PulseAudio, un convertitore di frequenza di campionamento, jack (un
server audio a bassa latenza), un encoder che permette un uscita a 6 canali
tramite una connessione digitale S/PFID (sia ottica che coassiale). Si può
scegliere quale di questi plugin installare aggiungendo le rispettive flag USE
in /etc/portage/package.use.
Codice 4.10: Installare alsa-plugins |
# emerge -avt alsa-plugins
|
Un grande ringraziamento a...
Tutti quelli che hanno contribuito alla versione precedente della Guida ALSA
Gentoo: Vincent Verleye, Grant Goodyear, Arcady Genkin, Jeremy Huddleston,
John P. Davis, Sven Vermeulen, Benny Chuang, Tiemo Kieft e Erwin.
Riferimenti
I contenuti di questo documento sono rilasciati sotto la licenza Creative
Commons - Attribution / Share Alike.
|