Gentoo Logo

Guida ad ALSA su Gentoo Linux

Indice:

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 3.x e 2.6 in tal modo da sostituire 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.

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/portage/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  --->

(Questa voce dev'essere abilitata)
<M> Sound card support

(Assicurarsi che OSS sia disabilitato)
Open Sound System   --->
   < > Open Sound System (DEPRECATED)

(Tornare indietro di un passo ed entrare in ALSA)
Advanced Linux Sound Architecture  --->
   <M> Advanced Linux Sound Architecture
   (Selezionare questo voce per MIDI sequencing e routing)
   <M> Sequencer support
   (Supporto /dev/mixer* e /dev/dsp* vecchio stile. Raccomandato.)
   <M> OSS Mixer API
   <M> OSS PCM (digital audio) API

(A questo punto verrà proposto un elenco di dispositivi per i quali
abilitare il supporto. Generalmente si avrà solamente un tipo di dispositivo, in
caso contrario abilitare tutti i supporti)

(Le opzioni contenute nel menù seguente possono servire principalmente
per scopo di test e sviluppo, non sono invece necessarie agli utenti normali a
meno di sapere quello che si sta facendo.)
Generic devices  --->

(Per schede sonore ISA)
ISA devices   --->
(Se si ha Gravis, selezionare questa opzione)
   <M> Gravis UltraSound Extreme

(Entrare in PCI devices. Molte schede sonore sono dispositivi PCI)
PCI devices   --->
   (Selezionare il driver emu10k1 per la scheda)
   <M> Emu10k1 (SB Live!, Audigy, E-mu APS)
   (O per una scheda Intel))
   <M> Intel/SiS/nVidia/AMD/ALi AC97 Controller
   (O per una scheda VIA)
   <M> VIA 82C686A/B, 8233/8235 AC97 Controller

(Tornare indietro di un livello ed entrare nel menù seguente se si ha una scheda sonora USB)
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

(Sostituire <nomeutente> con il nome del proprio utente)
# 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

(Aprire una console. Vengono mostrate solamente le impostazioni richieste)
# 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

Fig. 1: AlsaMixer Muted

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

Fig. 2: AlsaMixer Unmuted

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

(Installare l'applicazione desiderata)
# emerge madplay mpg123
(Per ascoltare i file .ogg)
# 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/portage/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

(Primo, se /proc/asound/cards mostra la scheda in uso, ALSA l'ha
scelta bene.)
# cat /proc/asound/cards
0 [Live           ]: EMU10K1 - Sound Blaster Live!
                     Sound Blaster Live! (rev.6, serial:0x80271102) at 0xb800, irq 11

(Qui viene visualizzata la versione attualmente in esecuzione)
# cat /proc/asound/version
Advanced Linux Sound Architecture Driver Version 1.0.8 (Thu Jan 13 09:39:32 2005 UTC).

(Dettagli sull'emulazione OSS di ALSA)
# 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

(Sono mostrate solo parti rilevanti)
# 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

(Controllare dmesg per conferma)
# dmesg | grep device_mode
snd: Unknown parameter `device_mode'
(A questo punto, recuperare la fonte del problema)
# 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/portage/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

(Copiare Soundfont)
# cp /mnt/win2k/Program\ Files/CreativeSBLive2k/SFBank/8MBGMSFX.SF2 /usr/share/sounds/sf2/
(O scaricarlo dal CD SoundBlaster)
# cp /mnt/cdrom/AUDIO/ENGLISH/SFBANK/8MBGMSFX.SF2 /usr/share/sounds/sf2/
(Caricare lo specifico Soundfont)
# 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

(Controllare le porte aperte)
# 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
(Scegliere una porta e ascoltare un file mid)
#  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



Stampa

Aggiornato il 24 luglio 2012

La versione originale di questo documento non è più mantenuta

Oggetto: Questo documento aiuta gli utenti a installare ALSA su Gentoo Linux.

Shyam Mani
Autore

Joshua Saddler
Autore

Diego Pettenò
Contributi

Davide Cendron
Traduzione

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.