Si dia un'occhiata al file FAQ nella directory del driver audio. Questa sezione è ancora in lavorazione.
Se i driver ALSA non si compilano correttamente e fanno qualche riferimento
a "version.h" o altri file header che non possono essere
trovati, potrebbe significare che non si dispone dei file header
del kernel. Si veda il Kernel HOWTO, si estragga un kernel
recente in /usr/src e si dia il comando make config
.
Le utilità contengono codice scritto in c++. Quasi tutti hanno un compilatore c++ contenuto in gcc o egcs, ma ci si assicuri di aver installato il pacchetto libstdc++-devel, altrimenti, lanciando lo script di configurazione delle utilità il sistema lascerà sconcertati con un messaggio di errore del tipo "il compilatore c++ non puù creare eseguibili".
Si controllino le seguenti voci.
ALSA usa alcuni dispositivi speciali contenuti nella directory /dev. Ci si assicuri di aver lanciato lo script ./snddevices nella directory dei sorgenti dei driver ALSA.
Si è sicuri al 100% che la scheda audio SIA supportata? Si controlli di nuovo. A volte una X123 non è uguale ad una X123b e si potrebbe solo perdere del tempo. D'altra parte anche una scheda supportata puù dare problemi: a me sono servite due ore per capire l'installazione di una CS4237B che, dopo tutto, si è dimostrata solo un esempio di RTFM (Acronimo di "Read The Fine Manual" (leggi il bel manuale) ndt).
Si potrebbe avere un kernel 2.0.x con supporto per l'audio compilato nel
kernel, o potrebbe essere caricato il driver audio OSS/Lite (del kernel)
(si controlli con il comando cat /proc/modules
). Si rimuova il
driver o si ricompili il kernel (si dia un'occhiata al Kernel-HOWTO).
Il modulo audio nella serie 2.0 del kernel si chiama "sound.o" e non dovrebbe essere attivo (il driver ALSA "snd.o" è comunque OK).
Avendo un kernel della serie 2.2.x senza driver audio compilato nel kernel i driver ALSA comunque non funzioneranno.
So che non è molto chiaro, quindi verrà spiegato una volta ancora. Con un kernel della serie 2.0.x (il comando ``uname -a'' dice qualcosa del tipo "Linux penguin 2.0.35 #6 Wed Sep 23 10:19:16 CEST 1998 i686 unknown") i driver dovranno essere lasciati fuori dal kernel. ALSA 0.4.x e successivi non funzionano con i kernel della serie 2.0
Con un kernel della serie 2.2.x si avrà bisogno dei driver audio. Un kernel della serie 2.2 dovrà essere compilato con il supporto per il suono ma senza il driver della scheda audio. Quindi si selezioni il supporto per l'audio ma ci si assicuri che nessuno specifico driver di scheda audio sia compilato.
Un'altra ragione per la quale i driver potrebbero lamentarsi del fatto che il dispositivo sia occupato potrebbe essere che il file /etc/conf.modules contenga ancora dei riferimenti ai driver della scheda audio. Questi riferimenti dovranno essere cancellati lasciando solo tutto ciù che si riferisce ai driver ALSA (sarebbe bene lasciare come sono i riferimenti a driver che non siano di dispositivi audio).
Un'altra sorgente di messaggi "unresolved symbols" potrebbe essere un nuovo kernel con i vecchi driver. Si è pregati di ricompilare i driver ALSA dopo aver ricompilato un nuovo kernel. Questo assicurerà la compatibilità tra i driver ed il nuovo kernel.
Si + sicuri che la scheda audio sia attiva? Si dia un'ulteriore occhiata al PnP-HOWTO e si controlli di aver attivato correttamente la scheda audio.
Controllare e ricontrollare i parametri della propria scheda audio. Si noti che 534 non è come 543 e neppure 0x534 è uguale a 534.
Inoltre qualche scheda audio potrebbe richiedere un driver diverso da quello che ci si aspetta. Si faccia una pausa con una birra o qualcos'altro e si dia ancora un'occhiata al comando "modprobe". Per esempio il driver per la Crystal 4232 dovrebbe essere caricato da modprobe snd-card-cs4232, e non "snd-cs4231", e la SoundBlaster PCI 64 dovrebbe essere caricata con "snd-audiopci", non con snd-es1370 (è tutto scritto nella documentazione ed anche avendo un HOWTO una volta ho perso un intero pomeriggio cercando di persuadere snd-cs4231 a produrre suoni).
I driver ALSA possono sfruttare la funzione di ``muting'' di cui molte schede audio dispongono. Se i driver audio sono stati caricati e tutto è andato bene ma non si sente altro che silenzio, probabilmente ci si è dimenticati di togliere il "muto" alla scheda. Ci sarà bisogno di "amixer" o "alsamixer" per farlo, sono tutti e due nel pacchetto ALSA-utilities. Si digiti solamente
amixer set -c 1 Master 70 unmute
amixer set -c 1 PCM 70 unmute
amixer set -c 1 CD 70 unmute
che dovrebbe funzionare per la maggior parte delle applicazioni. Si noti che usando programmi amixer più vecchi sarà necessario tralasciare la parte "set" nella riga di comando.
Quasi tutte le schede audio dispongono di un componente del mixer a parte per l'amplificazione degli input/output aggiuntivi. Questo componente è spesso chiamato "gain", "in-gain" per l'input ed "out-gain" per l'output. L'impostazione di questo componente ad un livello adeguato permetterà di ottenere il massimo volume dai propri altoparlanti (si pensi comunque ai propri genitori/vicini/orecchie). Quindi un comando come
amixer set out-gain 100 unmute
probabilmente sarà di aiuto.
Se questa è la prima volta che si usano i driver ALSA e prima
si usavano i driver audio del kernel, probabilmente si vorrà avere un
driver audio compatibile con quello precedente (ad esempio per usare i
dispositivi /dev/pcmX). Si dovrà caricare il "driver di
compatibilità OSS" per ottenere questo risultato. Si dia il comando
modprobe snd-pcm1-oss && modprobe snd-mixer-oss
(si veda la
sezione che riguarda il caricamento del driver). Si noti che snd-pcm1-oss
non è la stessa cosa di snd-pcm1, ci sarà bisogno di snd-pcm1-oss
per ottenere il supporto audio vecchio stile e di snd-mixer-oss per il mixer.
Provando ad installare diverse versioni di ALSA a volte il mixer diventa inaccessibile. Accade se si è provata la versione 0.3.2 e si è tentato di ritornare alla 0.3.0-pre4 (IIRC). Si dovranno cancellare tutti i file libasound ed i collegamenti ad essi da /usr/lib e quindi ricompilare librerie e programmi di utilità:
rm /usr/lib/libasound.*
Solo per sicurezza cancellare tutti i driver ALSA quindi ricompilare, installare e caricare i driver.
È sempre utile partire con il comando "insmod" invece che con kerneld. Si avrà così modo di vedere gli errori sullo schermo.
Si possono trovare molte informazioni nel file INSTALL presente nella directory dei driver. Se il driver si rifiuta di funzionare si controlli se sono disponibili informazioni aggiuntive.
Come ultima risorsa è possibile ricompilare il driver in modo
da fargli inviare le informazioni di debug su /var/log/messages. Andare
nella directory del driver con cd /usr/src/alsa-driver-....
e
digitare:
./configure --with-debug=detect; make clean; make
Si rimuova il driver (se esso è attivo si veda più avanti un comando generico per la rimozione). Si usi il comando "modprobe" usato prima per caricare il driver appena compilato. Si veda /var/log/messages per controllare se ci sono messaggi.
Se questi messaggi non sono di aiuto, mandare un messaggio alla mailing list degli utenti di ALSA, alsa-user@alsa-project.org.
Includere le seguenti informazioni:
Se si trova un bug, gli sviluppatori di ALSA vorranno sapere (al minimo) le seguenti cose:
Se si usa kmod/kerneld ed i driver ALSA per riprodurre i CD, probabilmente kmod/kerneld non carica i driver come dovrebbe. Questo è dovuto al fatto che un riproduttore di CD dice solo al CD di cominciare a riprodurre senza utilizzare alcuno dei dispositivi che avvisano kmod/kerneld della necessità del suono. Usare modprobe potrebbe essere l'unica soluzione a questo problema.
Normalmente la porta di IO del dispositivo seriale è di proprietà del driver del dispositivo seriale standard. Quindi prima di dare il comando "modprobe snd-serial" si dovrà dire al driver di rilasciare il dispositivo seriale.
Questa è la procedura.
setserial /dev/ttyS0 uart none
modprobe snd-serial
(Si sostituisca /dev/ttyS0 con l'opportuno dispositivo /dev/ttySx se il MIDI usa un diverso dispositivo seriale).
Dopo aver aggiornato il kernel probabilmente ci sarà bisogno di
ricompilare i driver ALSA. Se sono ancora nella directory originaria
/usr/src, non ci si dimentichi di dare un make clean
prima di
./configure, make, make install.
Ah, c'è una anomalia nella numerazione dei kernel: lo script di configurazione dice che un kernel "2.2.0ac1" è un "not a number" (non un numero, ndt). Penso che sia stato risolto nei nuovi script di configurazione altrimenti si dovrà cambiare la versione del kernel nei sorgenti.
Supponiamo di avere KDE funzionante e di non riuscire a far funzionare i suoni di sistema, quelli usati all'apertura delle finestre, o cambiando desktop ecc. L'audio in generale funziona. Se il riproduttore cd e mp3 ed il mixer funzionano normalmente probabilmente quello che non funziona è solo "kwmsound".
Quindi ci si assicuri che "kwmsound" sia nello script di avvio ($KDEDIR/bin/startkde)
Se si aveva già precedentemente il supporto per il suono nel proprio sistema Linux è probabile che tutte le applicazioni puntino a /dev/pcm0, /dev/audio e /dev/mixer. Questo va bene se si usa il modulo di compatibilità con OSS, snd-pcm1-oss. Potrebbe essere meglio, comunque, usare i dispositivi ALSA veri, quelli che si trovano in /dev/snd/.
La rimozione di 10 o più moduli uno ad uno non è la cosa giusta da fare. Fortunatamente tutti i moduli iniziano con il prefisso "snd-", quindi un po' di programmazione da riga di comando potrebbe fare al caso nostro. Si potranno facilmente rimuovere i driver ALSA con un comando di questo tipo:
cat /proc/modules|gawk '/^snd-/{print $1}'|xargs -i rmmod {}
Juergen Kahrs ha scritto: "Ho uno script che rimuove anche soundcore, soundlow e sound se sono presenti e se non sono utilizzati. Lo script processa /proc/modules tre volte quindi non dovrebbero restare troppi moduli dopo la sua esecuzione". Ecco la sua soluzione:
awk '/^snd/||/^sound/&&($3==0){system("rmmod "
$1)}' /proc/modules /proc/modules /proc/modules
Si noti che se qualche modulo dipende da qualche altro modulo non si puù semplicemente rimuovere il modulo "più alto". Questo significa che si potrebbe aver bisogno di una seconda esecuzione del comando di rimozione (comunque non ho mai incontrato questa situazione, sembra che i moduli ALSA possano essere rimossi nell'ordine in cui appaiono nel file /proc/modules).