(what a gay subject... duh, dar tinand cont ca e o perioada gay -
sarbatorile - cred ca e acceptabil)
So la sugestia unui colistash am zis sa scriu acest mesaj poate
intereseaza si pe altii. Nu sunt in general adeptul monologurilor ci
prefer sa raspund la intrebari la obiect. De asemenea ma astept ca
informatiile prezentate sa fie stiute de multe persoane dar din experienta
mea desi informatii se gasesc pe net, ele sunt dispersate in multe locuri
si mi-a luat mult timp sa le pun cap la cap.
1. Requirements
Ca orice average linux desktop user (ma consider mai degraba average unix
admin desktop user, adica aplicatia principala este rxvt si nu gaim, dar
lately a trebuit sa utilez tot mai des aplicatii din astea "lame" gen
gaim, firefox, thunderbird & co ;)) am un set de aplicatii de lucru
curent. Printre acestea numar: xmms (fara muzica nu merge treaba), gaim
(incet, incet IM-ul ia puternic din piata email/IRC desi eu prefer
ultimele metode de comunicare) si mai nou gnomemeeting (pt comunica VoIP).
Problema este ca in mod normal nu poti avea pornit si xmms (care sa cante
ceva) si gnomemeeting in acelasi timp (de fapt pot rula in acelasi timp
dar cand te suna cineva gnomemeeting nu poate sa te instiinteze ca suna
etc). Probabil ca sunt o groaza de workarround-uri (btw, arts/esd nu ajuta
deoarece ele ofera doar pe partea de output iar gnomemeeting vrea si
captura de la placa, full-duplex access) dar eu stiu ca pe Windows treaba
asta merge fara probleme. Deci vreau sa pot rula mai multe aplicatii care
folosesc sunet (cu ALSA), posibil full-duplex si sa nu am probleme de
acces concurent la placa de sunet pe un hardware average, gen placa de
sunet on board Intel (dar sa fie totusi full-duplex placa).
2. Solution
2.1 ALSA
ALSA de ceva versiuni incoace are conceptul de "PCM plugins". O treaba
foarte desteapta de configureaza userul si care este aplicata de alsa-lib.
Deci aplicatiile care folosesc alsa (si deci care folosesc alsa-lib) sunt
afectate in mod "transparent" de catre aceste setari relative la PCM
plugins.
2.2 PCM plugins configuration
Setarile de mai jos se pot face fie in /etc/asound.conf (system-wide,
afectand tot sistemul) sau in contul vostru in fisierul ".asoundrc".
Se trece in fisierul de configurare specificat mai sus ceva de genul:
pcm.!default {
type plug
slave.pcm "duplex"
}
pcm.dsp0 {
type plug
slave.pcm "duplex"
}
pcm.duplex {
type asym
playback.pcm "dmixer"
capture.pcm "dsnooper"
}
pcm.dmixer {
type dmix
ipc_key 1024
slave {
pcm "hw:0,0"
period_time 0
period_size 1024
buffer_size 32768
rate 48000
}
bindings {
0 0
1 1
}
}
pcm.dsnooper {
type dsnoop
ipc_key 1030
slave {
pcm "hw:0,0"
period_time 0
period_size 1024
buffer_size 32768
rate 48000
}
bindings {
0 0
1 1
}
}
Acest config defineste ca device-ul ALSA "default" este de fapt un plugin
numit "duplex". Apoi se defineste "duplex" ca fiind un plugin de tipul
"asym" (un tip de plugin ce ofera un PCM full-duplex oferind posibilitatea
userului sa isi defineasca ce PCM plugin sa foloseasca ca output si
respectiv ca input) ce defineste ca output un PCM plugin numit "dmixer" si
ca input un PCM plugin numit "dsnooper". Apoi se defineste "dmixer" ca
fiind de tipul "dmix" (plugin ALSA ce ofera posibilitatea de a scoate mai
mutle output-uri in acelasi timp, adica un fel de arts/esd) ce isi scoate
output-ul efectiv pe dispozitivul hardware "0.0" (care trebuie modificat
in cazul vostru in functie de ce dispozitiv hardware aveti pt output,
vedeti /proc/asound/devices pt IDs). De asemenea se defineste "dsnooper" ca
fiind un plugin de tipul "dsnoop" ce se asemeamana cu "dmix" doar ca pe
input, avand input-ul efectiv de pe device-ul "0.0" (trebuie adaptat pt
deviceul de capture de la voi). De exemplu la mine /proc/asound/devices
este:
1: : sequencer
0: [0- 0]: ctl
20: [0- 4]: digital audio playback
27: [0- 3]: digital audio capture
26: [0- 2]: digital audio capture
25: [0- 1]: digital audio capture
16: [0- 0]: digital audio playback
24: [0- 0]: digital audio capture
33: : timer
Precum se vede am "0-0" ca fiind si audio playback si audio capture.
Dupa ce ati pus informetiile astea in fisierul de configurare ALSA ar
trebui sa mearga sa puteti face multiple output si input in acelasi timp.
Ca sa testati multiple output folositi :
- aplay "fisier.wav" si lansati mai multe din astea si ar trebuit sa
auziti sunet combinat
Ca sa testati multiple input folositi :
- arecord "fisier.wav" si lansati mai multe din astea in acelasi timp (pe
fisiere diferite :)) si ar trebui sa vedeti ca s-a inregistrat ce
vorbiti la microfon in toate
2.3 XMMS
Compilati xmms cu suport de ALSA (sau modulul ALSA de xmms) si selectati
output modul ca fiind ALSA, dati configure la el si selectati "Default" ca
device de output, si la advanced vedeti sa NU fie "mmap mode" enabled. De
asemenea bifati "software volume" pt XMMS ca atunci cand umblati la volum
sa afectati doar melodia si nu toata placa de sunet cu ce stream-uri are
in acelasi timp.
2.4 GnomeMeeting
Din cauza ca developerul gnomemeeting a facut pe desteptul si cand
compilezi gnomemeeting (< 1.2) cu suport de ALSA, el detecteaza
device-urile hw (deci cele reale, nu cele PCM plugins) si alege device-ul
de input/output doar din acelea. Deci trebuie sa folositi minim
gnomemeeting 1.2 care nu are problema asta si pe langa device-urile
hardware ofera si "Default" ca alegere, iar acesta e exact device-ul
"default" care a fost definit in fisierul de configurare ca fiind un
plugin cu acces multiplu full-duplex.
Deci instalati gnomemeeting 1.2 cu suport de ALSA, selectati la
device-urile audio "Default" (vedeti ca mai e o setare si la "Ringing" pt
device-ul folosit doar la sunare).
Folosit alsa mixer (atentie, "aumix" care cica ar avea suport nativ de
ALSA e vai de mama lui, din cauza lui eu nu puteam inregistra bine de pe
microfon) si activati Mic Boost (+20db), plus selectati record pe "Mic" si
pe "Capture", dati volumul aproape de maxim la "Capture" si puteti pune
chiar "mute" pe Mic (la placa mea, inregistrearea de pe Mic este afectata
de switch-ul de Record de pe Mic si de pe Capture, iar volumul de
inregistrare este afectat de volumul de pe canalul Capture, faptul ca pun
mute la Mic afecteaza doar daca microfonul sa se auda in casti in timp ce
vorbesc sau nu, ceea ce de obicei nu vrei ca deja auzi ce vorbesti :)).
Ar trebui in acest moment sa puteti asculta muzica cu XMMS si sa puteti fi
sunat pe gnomemeeting (ba chiar sa puteti vorbi dar in practica probabil
ca o sa puneti o pauza pe melodie ca sa vorbiti).
3. Observatii:
- nu stiu de ce, dar mplayer cu -ao alsa by default incearca sa scoata pe
dispozitivul hw alsa si nu pe "default"; deci trebuie dat ceva de genul
"-ao alsa:device=default" (eventual pus si in config)
- teoretic merge si cu aplicatii care stiu doar OSS daca le lansati cu
wrapper-ul "aoss", adica "aoss /path/to/game" (nu prea merge cu
quake-urile ca alea vor mmap pe placa, desi se poate configura PCM plugins
sa suporte si mmap doar ca cica merge cam aiurea)
4. Referinte:
http://www.alsa-project.org/alsa-doc/alsa-lib/pcm_plugins.html
http://wiki2.archlinux.org/index.php/Alsa,%20XMMS%20and%20GAIM
--
Mihai RUSU Email: [EMAIL PROTECTED]
GPG : http://dizzy.roedu.net/dizzy-gpg.txt WWW: http://dizzy.roedu.net
"Linux is obsolete" -- AST
---
Detalii despre listele noastre de mail: http://www.lug.ro/