Avanti Indietro Indice

6. Test e uso

Ora si dovrà verificare se il driver audio è stato realmente caricato e quindi provare a usarlo.

6.1 Il filesystem /proc

Si possono trovare molte informazioni utili sul proprio sistema nella sottodirectory /proc. /proc è un filesystem "virtuale": ciù significa che non esiste veramente, ma che semplicemente è una mappatura dei vari processi e task del proprio computer. Affinché /proc funzioni dovrà esserci il supporto necessario compilato nel kernel. Molte distribuzioni di Linux lo fanno in maniera predefinita, ma se è stato compilato un kernel lasciando fuori il supporto per /proc, ovviamente non vi sarà nulla in /proc.

/proc/modules fornisce informazioni sui moduli caricati. Una volta che i driver audio ALSA sono stati caricati, dando il comando cat /proc/modules si dovrebbe vedere qualcosa come:

snd-pcm1-oss      4            0
snd-sb16          1            1
snd-sb-dsp        4    [snd-sb16]      0
snd-pcm1          4    [snd-pcm1-oss snd-sb-dsp]      0
snd-pcm           3    [snd-pcm1-oss snd-sb16 snd-sb-dsp snd-pcm1]    0
snd-mixer         3    [snd-pcm1-oss snd-sb16 snd-sb-dsp]      1
snd-mpu401-uart   1    [snd-sb16]      0
snd-midi          4    [snd-sb16 snd-sb-dsp snd-mpu401-uart]   0
snd-opl3          1    [snd-sb16]      0
snd-synth         1    [snd-sb16 snd-opl3]     0
snd-timer         1    [snd-opl3]      0
snd               8    [snd-pcm1-oss snd-sb16 snd-sb-dsp snd-pcm1 snd-pcm snd-mixer snd-mpu401-uart snd-midi snd-opl3 snd-synth snd-timer]    0

Se qualcosa è andato storto durante l'installazione del driver si vedranno un paio di dispositivi "snd", ma il supporto per l'audio non sarà attivo.

Per esempio (si noti che non si dovrà mai dare questo comando così come segue, il driver cs4236 ha bisogno delle opzioni):

win3:~# modprobe snd-card-cs4236
/lib/modules/2.0.35/misc/snd-card-cs4236.o: init_module: Device or resource busy
snd-mixer: Device or resource busy
win3:~# cat /proc/modules
snd-cs4236        2           0
snd-cs4231        3    [snd-cs4236]    0
snd-timer         1    [snd-cs4231]    0
snd-pcm1          4    [snd-cs4236 snd-cs4231] 0
snd-mixer         3    [snd-cs4236 snd-cs4231] 0
snd-pcm           3    [snd-cs4236 snd-cs4231 snd-pcm1]       0
snd-mpu401-uart   1           0
snd-midi          4    [snd-mpu401-uart]       0
snd-opl3          1           0
snd-synth         1    [snd-opl3]      0
snd-timer         1    [snd-cs4231 snd-opl3]   0
snd               8    [snd-cs4231 snd-timer snd-pcm1 snd-mixer snd-pcm]     0

Si puù controllare l'esistenza di una scheda audio guardando in /proc/asound/cards. Per esempio:

bash$ cat /proc/asound/cards
0 [card1          : SB16 - Sound Blaster 16
                    Sound Blaster 16 at 0x220, irq 5, dma 1&5

Nell'esempio precedente (dove le opzioni sono state dimenticate) l'output sarebbe dovuto essere:

win3:~# cat /proc/asound/cards
--- no soundcards ---

Una scheda CS4236 funzionante produrrebbe

0 [card1         ]: CS4236 - CS4237B
                    CS4237B at 0x534, irq 7, dma 1&0

Se sono state controllate e ricontrollate le impostazioni ed ancora non si vede nessuna scheda, si dia un'occhiata alla sezione risoluzione dei problemi.

La directory virtuale /proc/asound fornisce molte altre informazioni sul driver. Si noti che /proc/asound esisterà solo dopo aver caricato il primo modulo ALSA. Se /proc/asound non c'è, significa semplicemente che il modulo "snd" non è stato correttamente caricato. Si possono identificare le schede installate in /proc/asound/cards, e trovare le informazioni sulla scheda0 in /proc/asound/0, quelle sulla scheda1 in /proc/asound/1 ecc.

Se cat /proc/asound/card1/pcm0 mostra qualcosa come

      ES1370 DAC2/ADC
      Playback isn't active.
      Record isn't active.

significa che il driver è pronto a funzionare, ma in questo momento non sta facendo nulla (quindi è andato tutto bene).

Per chi usa un kernel 2.0 c'è un terzo metodo per trovare informazioni sui dispositivi audio, vale a dire che se è stato caricato il driver OSS compatibile vi sarà un dispositivo /dev/sndstat. I driver ALSA chiedono gentilmente di non fare affidamento su queste informazioni, poiché il dispositivo è presente solo per compatibilità con i driver OSS e informazioni più attendibili possono essere ottenute da /proc/asound/. Nei kernel 2.2.x ALSA utilizza il soundcore del kernel e quindi non puù emulare /dev/sndstat, poiché potrebbe interferire con i driver OSS.

6.2 Il mixer

Una volta che i driver per la scheda audio sono stati installati e il filesystem /proc assicura che tutto è andato a buon fine si puù provare a produrre qualche suono.

Per farlo si dovranno impostare i volumi del mixer ad un valore ragionevole: ci sarà bisogno del programma "amixer", dal pacchetto alsa-utils.

Prima di tutto si installi il pacchetto dei programmi di utilità, o almeno si metta il comando "amixer" in qualche posto accettabile (come /usr/local/bin).

La versione 0.3.2 e successive hanno un'interfaccia diversa da quelle dei driver OSS. Digitando "amixer" verranno mostrati i vari elementi del mixer e i relativi valori. Uno di questi elementi potrebbe essere "volume master", per esempio, e potrebbe presentarsi così:

Group 'Master',0
  Capabilities: volume
  Channels: Front-Left Front-Right 
  Limits: min = 0, max = 31
  Front-Left: 31 [100%] [on] [---]
  Front-Right: 26 [84%] [on] [---]

Sfortunatamente non si sa come impostare indipendentemente i volumi sinistro e destro. Con amixer si possono cambiare i volumi con il comando "amixer set". Per esempio, per cambiare il volume Master, si puù dare il comando

amixer set Master 15

Si noti che i nomi degli elementi possono essere diversi per diversi tipi di schede audio. Si noti anche che amixer fa differenza tra maiuscolo e minuscolo, perciù "amixer set masteR 10" non funzionerà. Per maggiori informazioni si veda la pagina di manuale di amixer.

Con la versione 0.3.0-pre4 di ALSA, amixer funziona come i normali programmi di mixer.

Si puù dare un'occhiata alle impostazioni del mixer digitando "amixer". Questo comando mostra le impostazioni del mixer o, come vengono normalmente chiamate, le impostazioni del volume delle diverse parti della scheda audio. L'output di amixer puù variare molto da scheda a scheda. Per la mia Soundblaster 16 dice:

Master         0  % (-14.00dB) : 0  % (-14.00dB)
Bass           0  % (-14.00dB) : 0  % (-14.00dB)
Treble         0  % (-14.00dB) : 0  % (-14.00dB)
Synth          0  % (-62.00dB) : 0  % (-62.00dB)
PCM            0  % (-62.00dB) : 0  % (-62.00dB)
Line-In        0  % (-62.00dB) : 0  % (-62.00dB) Mute
MIC            0  % (-62.00dB) : 0  % (-62.00dB) Mute
CD             0  % (-62.00dB) : 0  % (-62.00dB) Mute
In-Gain        0  % (-18.00dB) : 0  % (-18.00dB)
Out-Gain       0  % (-18.00dB) : 0  % (-18.00dB)
PC Speaker     0  % (-18.00dB) : 0  % (-18.00dB)

Se si ottiene solo un messaggio del tipo "amixer: Specify command..." si stanno utilizzando i programmi di utilità di ALSA 3.2. Il suggerimento è aggiornare le utilità alla versione 0.4.1e o successive, oppure ritornare alla versione 0.3.0-pre4.

Impostazioni del mixer per la riproduzione

Sarà stata notata la voce "Mute" su qualche dispositivo. Questa significa che quel particolare dispositivo sarà escluso, qualunque sia il suo livello di volume. Alcune schede (la CS4237B dell'esempio) azzerano il volume anche sul canale principale. Nel caso della CS4237B si dovrebbe digitare

amixer set "Master d" unmute

per riuscire anche solo ad udire qualche suono. La Soundblaster non ha il volume azzerato sul canale di output ma

amixer set Master 100 unmute

imposterà il volume al 100% e toglierà il "muto" al canale principale. é possibile usare un numero, una parola come "mute" o "unmute" o entrambi. Digitando

amixer set "Master d" 100; amixer set PCM 100 unmute

si imposta la scheda CS4237B al massimo volume del canale principale e si toglie il "muto" al canale PCM portandolo al massimo volume.

Usando una versione di amixer più vecchia, si dovrà tralasciare la parte "set" del comando, dunque basterà digitare

amixer "master d" 100

Componenti del mixer

I vari componenti del mixer possono confondere se non si hanno conoscenze sulla produzione di audio digitale. Il Sound-HOWTO potrebbe essere d'aiuto, qui si troverà una introduzione molto breve.

Probabilmente si avrà bisogno solo di pochi elementi del mixer: uno di questi è l'impostazione "CD" (cioè il suono analogico proveniente dal lettore CD; quasi tutti i lettori di CD sono connessi con un cavo rosso/bianco/nero a 3 o 4 fili).

L'impostazione "PCM" è usata per quasi tutte le applicazioni. Programmi come mpg123, xmms, speakfreely, realplayer ed altri usano il canale PCM.

"MIC" sta per microfono, "line-in" è un ingresso extra (opzionale) posto in fondo alla scheda audio.

I vari componenti "gain" ("guadagno" ndt) permettono di avere una ulteriore amplificazione per diversi usi e sono facilmente comprensibili. (per esempio record-gain è una ulteriore amplificazione del canale di registrazione, che puù tornare utile se si utilizza un microfono).

Impostazioni del mixer per la registrazione

Si puù impostare il canale CD per la registrazione digitando

amixer set CD capture

e fermare la registrazione con

amixer set CD nocapture.

Si noti che programmi amixer più vecchi usano "amixer CD rec" e "amixer CD norec" a questo scopo.

Per registrare qualcosa dal microfono si userà

amixer set "Input Gain" 100; amixer set Mic 100 capture mute.

(l'uso dell'input dal microfono senza volume azzerato potrebbe generare del rumore ad alta frequenza se il microfono captasse il suo stesso suono dagli altoparlanti). Molti microfoni dispongono di una impostazione di "gain"per amplificarne il volume; probabilmente si dovrà agire su questa per riuscire ad udire i suoni provenienti dal microfono.

Di nuovo, programmi amixer più vecchi useranno mixer ``"input gain" 100; amixer mic 100 rec mute''.

Altre impostazioni del mixer

Sfortunatamente non sono riuscito a modificare il volume delle impostazioni "3d center" e "3d space" con amixer 0.3.0-pre4. Non ho ancora provato la versione 0.4.1e (questa particolare macchina usa ancora 2.0.38). Se qualcuno ci riuscisse è pregato di farmelo sapere. A questo scopo puù essere utilizzato alsamixer, per il quale perù non è ancora stato fatto il port alla versione 0.4.1e.

Le FAQ di ALSA dicono che è possibile ripristinare le impostazioni del mixer con cat <file> > /proc/asound/#/mixerC0D0, dove <file> è l'output di /proc/asound/#/mixerC0D0. Non sono riuscito a far funzionare questo metodo perché il suo sistema si lamenta riguardo a dei dispositivi inesistenti. Inoltre c'è il programma "alsactl", che non uso. Siete invitati (sì, voi) a scrivere questa sezione.

6.3 I dispositivi /dev/snd/

I driver ALSA dispongono di dispositivi audio nativi nella directory /dev/snd. Se si dispone di una scheda si potranno vedere i seguenti dispositivi:

/dev/snd/pcmC0D0 - il dispositivo raw audio della scheda
/dev/snd/mixerC0D0 - il mixer per la scheda 0
/dev/snd/controlC0D0 - il dispositivo di controllo per la scheda 0

Il primo numero indica il numero della scheda audio, il secondo numero (se c'è) è il numero del dispositivo. Una scheda audio con due dispositivi PCM dovrebbe avere un dispositivo pcmC0D0 e uno pcmC0D1. Si noti che i dispositivi ALSA sono cambiati rispetto alle precedenti versioni. I vecchi dispositivi ALSA usavano /dev/snd/pcm00 (il primo numero è la scheda, il secondo il dispositivo). Se questo HOWTO usa la vecchia notazione scrivetemi, così potrù essere corretto.

Ora si puù provare a mettere un file audio qualunque nel dispositivo PCM della prima scheda. Si provi quindi a fare un cat di un qualsiasi file di testo (un file qualunque) in /dev/snd/pcmC0D0, per esempio cat <filename> > /dev/snd/pcmC0D0. <nomefile> puù essere un file qualsiasi, purché sia abbastanza lungo. Se c'è un file audio da qualche parte si puù provare con quello. Si puù anche prendere il file presente su http://www.ldp.org/sounds/english.au, è Linus Torvalds che fa sentire come si pronuncia Linux.

L'impostazione predefinita del dispositivo audio è 8000 Hz, 8 bit. Questo significa che il file "english.au" di cui sopra riprodurrà il discorso, gli altri file di testo produrranno semplicemente del rumore. Se non si sente nulla si controllino gli altoparlanti, si provi di nuovo con "amixer" o si consulti un medico (più avanti si potrà facilmente utilizzare la propria scheda a 48 Khz e 16 bit con il proprio riproduttore preferito, tipo sox o mpg123).

Se è stato caricato il modulo "snd-pcm1-oss" si puù anche usare la compatibilità con OSS per accedere alla scheda. Sono utilizzate le seguenti mappature:

/dev/snd/pcmC0D0 -> /dev/audio0 (/dev/audio) -> minor 4
/dev/snd/pcmC0D0 -> /dev/dsp0 (/dev/dsp) -> minor 3
/dev/snd/pcmC0D1 -> /dev/adsp0 (/dev/adsp) -> minor 12
/dev/snd/pcmC1D0 -> /dev/audio1 -> minor 4+16 = 20
/dev/snd/pcmC1D0 -> /dev/dsp1 -> minor 3+16 = 19
/dev/snd/pcmC1D1 -> /dev/adsp1 -> minor 12+16 = 28
/dev/snd/pcmC2D0 -> /dev/audio2 -> minor 4+32 = 36
/dev/snd/pcmC2D0 -> /dev/dsp2 -> minor 3+32 = 35
/dev/snd/pcmC2D1 -> /dev/adsp2 -> minor 12+32 = 44

Probabilmente si vorrà anche usare il modulo "snd-mixer-oss", per poter sfruttare il mixer con la retrocompatibilità.

6.4 Informazioni aggiuntive

Il file INSTALL nella directory del driver ALSA menziona alcuni accorgimenti per dire al driver quale impostazioni usare. L'avere o meno bisogno di questi comandi dipenderà dall'applicazione che verrà usata per riprodurre l'audio. Le normali applicazioni di riproduzione audio, come mpg123, sox (frequentemente richiamato col comando "play"), o le applicazioni per X11 come RealPlayer probabilmente funzioneranno correttamente comunque. In ogni caso non li ho mai utilizzati.

/proc/asound/#/pcm#0

"Playback erase" - cancella tutte le informazioni aggiuntive 
sulle applicazioni OSS "Playback <app_name> <fragments> 
<fragment_size> [<options>]"
"Record erase" - cancella tutte le informazioni aggiuntive sulle applicazioni OSS
"Record <app_name> <fragments> <fragment_size> 
[<options>]"

<app_name> - nome dell'applicazione con (priorità più alta) o senza percorso

<fragments> - numero dei frammenti o zero in modalità automatica

<fragment_size> - dimensione dei frammenti in byte o zero in modalità automatica

<options> - parametri opzionali

WR_ONLY - se l'applicazione prova ad accedere al dispositivo pcm con O_RDWR il driver lo cambia in O_WRONLY (riproduzione). Ottimo per Quake ecc.

Esempi:

echo "Playback x11amp 128 16384" > /proc/asound/0/pcm0o
echo "Playback squake 0 0 WR_ONLY" > /proc/asound/0/pcm0o

/proc/asound/#card#/sb16

"Playback 8" -> il driver userà sempre il canale DMA a
8-bit per la riproduzione.
"Playback 16" -> il driver userà sempre il canale DMA a 16 bit per la 
riproduzione.
"Playback auto" (predefinito) -> il driver userà la configurazione 
automatica (il primo canale aperto utilizzerà il canale DMA a 16 bit).
"Record 8" -> il driver userà sempre il canale DMA a 8 bit per la 
registrazione.
"Record 16" -> il driver userà sempre il canale DMA a 16 bit per la 
registrazione.
"Record auto" (predefinito) -> il driver utilizzerà la configurazione 
automatica (il primo canale aperto utilizzerà il canale DMA a 16 bit).

Esempio: echo "Record 16" > /proc/asound/0/sb16

Per altre informazioni si consulti il file INSTALL.


Avanti Indietro Indice