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


Raspunde prin e-mail lui