Gentoo Linux ALSA Guide
1.Introduzione
Che cosa è ALSA?
ALSA, Advanced Linux Sound Architecture, fornisce funzionalità audio e
MIDI (Musical Instrument Digital Interface) al sistema operativo Linux.
ALSA è il sottosistema audio di default nei kernel 2.6 e ha sostituito OSS
(Open Sound System) usato nei kernel 2.4.
Le principali caratteristiche di ALSA includono supporto efficiente per tutti
i tipi di interfacce audio, da quelle normali a quelle professionali, driver
totalmente modularizzati, SMP e sicuro, retro-compatibilità con OSS e una
libreria per gli utenti, alsa-lib, per facilitare la programmazione
delle applicazioni.
ALSA su Gentoo
Una delle maggiori forze di Gentoo è dare agli utenti il massimo controllo
sulla installazione/configurazione di un sistema. ALSA su Gentoo segue lo
stesso principio. Ci sono due modi per fare funzionare ALSA sul vostro sistema.
Nel prossimo capitolo li vedremo in dettaglio.
2.Installare ALSA
Opzioni
Attenzione:
I metodi descritti sotto sono da usare in maniera esclusiva. Non si può avere
ALSA compilato e usare media-sound/alsa-driver. Ci saranno
problemi.
|
Le due opzioni sono:
-
Usare ALSA fornito dal kernel. Questo è il metodo raccomandato.
-
Pacchetto media-sound/alsa-driver.
Prendiamo in considerazione entrambe le opzioni.
Se si sceglie di usare ALSA fornito dal kernel, questi sono i pro e i contro:
| Kernel ALSA |
Pro e Contro |
| + |
Stabile poichè i driver sono integrati nel kernel. |
| + |
Basta una sola soluzione, senza ripetere emerge. |
| - |
Potrebbe essere una versione più vecchia di alsa-driver. |
Se si sceglie di usare alsa-driver,
| alsa-driver |
Pro e Contro |
| + |
Ultimi driver dal ALSA Project. |
| - |
Ogni kernel che si compila richiede un re-emerge di alsa-driver.
|
| - |
Ha bisogno che siano disabilitate alcune opzioni di configurazione del kernel
per funzionare in maniera corretta.
|
E allora...
La principale differenza tra alsa-driver e ALSA fornito dal kernel è
che alsa-driver è più aggiornato della versione nel kernel. Non è una
grande differenza, e si raccomanda di usare ALSA fornito dal kernel per un
facile uso. Prima di riportare problemi relativi al suono in
Gentoo Bugzilla, cercate di
riprodurli usando alsa-driver e inserite il bug report.
Prima di andare avanti
Qualsiasi metodo di installazione avete scelto, è necessario sapere quali
driver usa la vostra scheda sonora. Nella maggior parte dei casi, le schede
sonore (onboard e altre) sono basate PCI e lspci vi aiuterà nella
ricerca delle informazioni. Emergere 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, cercate di usare sys-apps/isapnptools. Le seguenti pagine
potrebbero aiutare gli utenti con schede sonore basate ISA.
Nota:
Per facilità di uso/spiegazione, si assume di avere una scheda sonora PCI nel
resto della guida.
|
Troviamo i dettagli della scheda sonora.
Esempio 1: Dettagli della scheda sonora |
# lspci -v | grep -i audio
0000:00:0a.0 Multimedia audio controller: Creative Labs SB Live! EMU10k1 (rev 06)
|
Sappiamo che la scheda sonora è una Sound Blaster Live! della Creative Labs.
Andare in
ALSA Soundcard Matrix e selezionare Creative Labs dal menu in basso. Si
andrà nella pagina Creative Labs matrix dovo si può vedere che la SB Live!
usa il modulo emu10k1. Questa è l'informazione che ci serve. Se siete
interessati ad ulteriori informazioni, cliccate sul link "Details" per andare
nella pagina emu10k1.
Usare ALSA fornito dal kernel
Questo è il metodo più facile.
Nota:
Dal rilascio 2005.0, Gentoo Linux usa il 2.6 come kernel di default. A meno che
non state usando un profilo 2.4, gentoo-sources è un kernel 2.6 sulla
maggior parte delle architetture. Controllate se il vostro kernel è
della serie 2.6. Questo metodo non funzionerà con un kernel 2.4.
|
Configuriamo 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.
|
Esempio 2: Andare sul sorgente |
# cd /usr/src/linux
# make menuconfig
|
Nota:
L'esempio sopra assume che il symlink /usr/src/linux punti al
sorgente del kernel che si desidera usare. Assicuratevi che sia così prima
di continuare.
|
Vediamo alcune delle opzioni da abilitare nel kernel 2.6 per il supporto ALSA
della scheda sonora.
Notate che tutti gli esempi mostrano ALSA compilato come modulo. E' consigliato
seguire questa impostazione poichè dopo permette di usare alsaconf che
è un vantaggio per configurare la scheda. Non saltate la sezione
Configurazione di questo documento. Se volete
avere le opzioni comilate non come moduli, cambiate la configurazione di
conseguenza.
Esempio 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 --->
|
Le opzioni sono impostate, si può (ri)compilare il kernel e il supporto ALSA
per la vostra scheda dovrebbe funzionare dopo il reboot. Non dimenticate di
aggiornare la configurazione GRUB per usare il nuovo kernel. Si può procedere
con ALSA Utility e vedere se tutto funziona.
Usare il pacchetto ALSA driver
Avete deciso di installare alsa-driver. Ci sono un pò di cose da fare
per assicurarsi che i driver per la vostra scheda sonora sono compilati. Non
sono necessarie ma non saranno compilati driver che non serviranno.
Se non sapete di quali driver la vostra scheda sonora ha bisogno, guardate la
sezione lspci di questa guida. Dopo aver visto il nome
del driver (emu10k1 nel nostro esempio), modificare
/etc/make.conf e aggiungere una variabile, ALSA_CARDS.
Esempio 4: Aggiungere ALSA_CARDS a make.conf |
ALSA_CARDS="emu10k1"
ALSA_CARDS="emu10k1 via82xx"
|
Se avete compilato il kernel e volete usare alsa-driver, assicuraratevi
che le seguenti opzioni siano impostate correttamente.
Nota:
Gli utenti che hanno usato genkernel possono procedere con
Installare alsa-driver poichè la
configurazione è già impostata.
|
-
CONFIG_SOUND è impostato. (Basic Sound support enabled)
-
CONFIG_SOUND_PRIME non è impostato. (In-built OSS support disabled)
-
CONFIG_SND non è impostato. (In-built ALSA support disabled)
-
/usr/src/linux punta al kernel con cui si vuole fare funzionare
ALSA.
Esempio 5: .config controlli |
# cd /usr/src/linux
# grep SOUND .config
CONFIG_SOUND=y
CONFIG_SOUND_PRIME is not set
# grep SND .config
CONFIG_SND is not set
|
Emergere alsa-driver.
Esempio 6: Installare alsa-driver |
# emerge alsa-driver
|
Importante:
Si deve eseguire emerge alsa-driver dopo ogni volta che si (ri)compila
il kernel, poichè i driver precedenti sono cancellati.
|
3.Configurare/Testare ALSA
ALSA Utility
alsa-utils è una parte integrante di ALSA e ha molti programmi molto
utili, incluso ALSA Initscripts. E' raccomandato emergere alsa-utils.
Esempio 7: Installare alsa-utils |
# emerge alsa-utils
|
Nota:
Se avete attivato ALSA nel vostro kernel e
non avete compilato ALSA come modulo, procedete alla sezione
ALSA Initscript. Gli altri devono configurare
ALSA. Molto facile con alsaconf fornito da alsa-utils.
|
Configurazione
Nota:
Chiudete i programmi che potrebbero accedere alla scheda sonora mentre
si esegue alsaconf.
|
Il modo più facile per configurare la vostra scheda sonora è eseguire
alsaconf. Digitare alsaconf in una shell come root.
Esempio 8: Aprire alsaconf |
# alsaconf
|
Si è accolti da un menu guidato che controlla i vostri dispositivi e cerca di
trovare la vostra scheda sonora. Viene chiesto di scegliere la vostra scheda
sonora da un elenco. Dopo si chiede il permesso di fare i cambimenti richiesti
a /etc/modules.d/alsa. Poi setta il volume in modo ottimizzato,
esegue modules-update e fa partire il servizio
/etc/init.d/alsasound. Quando alsaconf si chiude, si può
procedere con impostare initscript ALSA.
ALSA Initscript
E' necessario avere qualcosa che carichi i moduli o inizializzi ALSA e
riprendere le impostazioni del volume quando il sistema si avvia. Initscript
ALSA gestisce tutto questo e è chiamato alsasound. Aggiungerlo al
runlevel di boot.
Esempio 9: 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 è impostata a yes. Questo salva le impostazioni sonore
quando si spegne il 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 necessario.
Questa si applica bene anche qui. Molte volte siete loggati come user e
volete ascoltare musica o accedere alla scheda sonora. Per questo dovete essere
nel gruppo "audio". Si aggiungono gli utenti al gruppo audio, così non si
avranno problemi. Si usa gpasswd e è necessario essere loggati come
root.
Esempio 10: Aggiungere utenti al gruppo audio |
# gpasswd -a <username> audio
Adding user <username> to group audio
|
Controllare il volume
Facciamo partire ALSA. Se avete eseguito alsaconf si può saltare questo
passo.
Esempio 11: Fare partire il servizio |
# /etc/init.d/alsasound start
* Loading ALSA modules ...
* Loading: snd-card-0 ... [ ok ]
* Loading: snd-pcm-oss ... [ ok ]
* Loading: snd-seq ... [ ok ]
* Loading: snd-emu10k1-synth ... [ ok ]
* Loading: snd-seq-midi ... [ ok ]
* Restoring Mixer Levels ... [ ok ]
# /etc/init.d/alsasound start
* Loading ALSA modules ...
* Restoring Mixer Levels ... [ ok ]
|
Controlliamo il volume poichè in certi casi è muto. Usiamo alsamixer
per questo scopo.
Esempio 12: Fare partire alsamixer |
# alsamixer
|
Importante:
Se si hanno problemi a fare partire alsamixer e ottenete errori come
alsamixer: function snd_ctl_open failed for default: No such file or directory,
è un problema comune con udev e la impostazione del device. Eseguire
killall udevd; udevstart per ricaricare le voci /dev e
ri-eseguire alsamixer. Dovrebbe risolvere il problema.
|
Questo è come ALSA Mixer dovrebbe essere la prima volta che lo aprite.
Attenzione ai canali Master e PCM che hanno un MM. Significa che sono muti. Se
si prova a ascoltare qualcosa con alsamixer non si sente niente.
Figura 1: Finestra principale di Alsa Mixer, Muto |
 |
Si attivano i canali, e si imposta il livello del volume come necessario.
Attenzione:
Master e PCM devono essere attivati e impostati con un livello di volume
ascolabile per ascoltare qualche suono dalle vostre 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 potrebbe causare stonatura sulle casse
difficili da risolvere.
|
ALSA Mixer dovrebbe essere simile a quello sotto. Notare 00 invece di MM e
anche il livello del volume per alcune impostazioni ottimizzate.
Figura 2: Alsa Mixer pronto |
 |
Controllare il suono
Vediamo se si sente un suono statico dalle casse. E' un modo per vedere se la
scheda sonora è configurata e funzionante.
Esempio 13: Suono statico |
# cat /dev/urandom > /dev/dsp
|
Nota:
/dev/dsp è un symlink a /dev/sound/dsp e dovrebbe
essere automaticamente creato. Re-dirigere l'output a
/dev/sound/dsp se si ottiene un errore
"No such file or directory".
|
Si dovrebbe sentire un suono statico. Premere Ctrl + C per fermarlo. Se
non si sente niente rileggere la guida e correggere l'errore.
Sentiamo qualche canzone. Un modo veloce è quello di usare tool a riga di
comando come media-sound/madplay. Si potrebbe usare anche mpg123
o xmms. Se siete fan di ogg, usate ogg123 fornito da
media-sound/vorbis-tools. Usate qualsiasi player volete. Emergete
quello che volete usare.
Esempio 14: Ottenere il software |
# emerge madplay mpg123 xmms
# emerge vorbis-tools
|
E ascoltate la vostra canzone preferita.
Esempio 15: 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
Si può aggiungere la flag use alsa a /etc/make.conf per
assicurare che tutte le applicazioni che supportano ALSA sono compilate con
essa. Architetture come x86 e amd64 hanno la flag abilitata di default.
Problemi?
Se per qualche ragione non sentite il sonoro, la prima cosa da controllare
sono le impostazioni alsamixer. 80%
dei problemi si risolvono perchè i canali erano muti o il volume era
basso. Controllare anche Window Manager's sound applet e verificare che i
volumi sono impostati per stare a un livello ascoltabile.
/proc e /proc/asound sono altre cose da controllare.
Esempio 16: /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 è "Unknown symbol in module". Un esempio è mostrato
sotto.
Esempio 17: 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:
Esempio 18: 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 a ALSA nel kernel
perchè quando si unmerge alsa-driver i moduli sono protetti e quindi
lasciati. Quando si passa a driver nel kernel, eseguendo modprobe si
vedono un mix di moduli di alsa-driver e del kernel e causa gli errori.
La soluzione è abbastanza semplice. Si deve rimuovere manualmente il problema
dopo unmerge alsa-driver. Assicurarsi di rimuovere la versione del
kernel corretta e non quella attuale.
Esempio 19: Rimuovere moduli alsa-driver |
# rm -rf /lib/modules/KERNELVER/alsa-driver
|
4.Altre cose
Impostare il supporto MIDI
Se la vostra scheda sonora ha un sintetizzatore MIDI e volete ascoltare file
.mid, dovete installare awesfx un insieme di programmi per controllare
il driver AWE32. Si deve installarlo prima. Se non si ha un sintetizzatore
hardware si può usare uno virtuale. Vedere la sezione
Sintetizzatore virtuale per altre informazioni.
Esempio 20: Installare awesfx |
# emerge awesfx
|
Nota:
Si devono 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. Si può
anche aggiungere il comando asfxload in
/etc/conf.d/local.start, e il font audio è caricato ogni volta
che parte il sistema.
Nota:
/mnt qui sotto potrebbe non essere lo stesso sulla vostra
macchina. E' solo un esempio. Cambiate il percorso in base alle vostre opzioni.
|
Esempio 21: 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.
Esempio 22: 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 vostra scheda sonora non ha un sintetizzatore hardware, potete utilizzare
timidity++.
Esempio 23: Installare timidity++ |
# emerge timidity++
|
C'è bisogno di un font audio per far funzionare timidity. Se non l'avete,
installate timidity-eawpatches o timidity-shompatches, ve ne
darà alcuni. Si possono avere varie configurazioni di font audio installate,
e potete mettere la vostra in /usr/share/timidity/. Per passare da
una configurazione ad un'altra, si dovrebbe usare timidity-update
fornito nel pacchetto timidity++.
Esempio 24: Installare font audio |
# emerge timidity-eawpatches
# timidity-update -g -s eawpatches
# emerge timidity-shompatches
# timidity-update -g -s shompatches
|
Non dimenticatevi di aggiungere timidity al runlevel di default.
Esempio 25: Aggiungere timidity al runlevel di default |
# rc-update add timidity default
# /etc/init.d/timidity start
|
Si può provare a Ascoltare MIDI file.
Tool e firmware
Alcune schede audio possono beneficiare di alcuni tool forniti dai pacchetti
alsa-tools e alsa-firmware. Se avete bisogno di
alsa-tools, definite la variabile ALSA_TOOLS in
/etc/make.conf, con il tool che volete. Per esempio:
Esempio 26: Selezionare ALSA Tools in /etc/make.conf |
ALSA_TOOLS="as10k1 ac3dec"
|
Se la variabile ALSA_TOOLS non è impostata, saranno compilati tutti i tool
disponibili. Poi installate i pacchetti alsa-tools
(e/o alsa-firmware):
Esempio 27: Installare ALSA Tools |
# emerge alsa-tools
|
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
|