Portál AbcLinuxu, 26. května 2024 02:50


Dotaz: alsa buffer

26.6.2020 04:44 jejda | skóre: 24 | blog: jejda
alsa buffer
Přečteno: 431×
Odpovědět | Admin
Ahojte! Několik let jsem spokojeně používal tento odněkud z netu zkopírovaný a trochu ručně doupravený /etc/asound.conf Takto mi fungujou obě fyzické zvukovky plus jedna loopback virtuální ze které občas nahrávám.
pcm.!default {
  type asym
  playback.pcm "LoopAndReal"
## capture.pcm "looprec"
##  capture.pcm "hw:0,0"
  capture.pcm "xonar-in"
}

ctl.!default {
        type hw
        card Device
}

pcm.xonar-in {
    type dsnoop
    ipc_key 1026
    ipc_key_add_uid yes
    slave {
            pcm "hw:1,0"
#            period_size 512
#            buffer_size 2048
    }
}

pcm.onboard {
    type hw
    card Intel
}

ctl.onboard {
    type hw
    card Intel
}

pcm.xonar-usb {
    type hw
    card Device
}

ctl.xonar-usb {
    type hw
    card Device
}

pcm.looprec {
    type hw
    card "Loopback"
    device 1
    subdevice 0
}

pcm.LoopAndReal {
  type plug
  slave.pcm mdev
  route_policy "duplicate"
}

pcm.mono {
  type route
  slave.pcm LoopAndReal
  slave.channels 2
  ttable.0.0 0.5
  ttable.0.1 0.5
  ttable.1.0 0.5
  ttable.1.1 0.5
}

pcm.mdev {
  type multi
  slaves.a.pcm pcm.MixReale
  slaves.a.channels 2
  slaves.b.pcm pcm.MixLoopback
  slaves.b.channels 2
  bindings.0.slave a
  bindings.0.channel 0
  bindings.1.slave a
  bindings.1.channel 1
  bindings.2.slave b
  bindings.2.channel 0
  bindings.3.slave b
  bindings.3.channel 1
}

pcm.MixReale {
  type dmix
  ipc_key 1027
  slave {
    pcm "hw:1,0"
    period_size 512
    buffer_size 2048
  }
}

pcm.MixLoopback {
  type dmix
  ipc_key 1025
  slave {
    pcm "hw:Loopback,0,0"
    period_size 512
    buffer_size 2048
  }
}
Posledních pár dní když ale pustím nějakou muziku nebo film, tak se běhěm 2-3 minut přehrávání postupně zvyšuje vytížení CPU až na 100%. Po chvilce co se procesor peče a video se seká, se to nějak záhadně samo resetne, a zase pomaloučku 2 minuty stoupá až na 100% load. A tak furt dokola. Pokud během přehrávání zmáčknu pauzu, resetne se to taky. Jako hlavní přehrávač používám mpv ale dělají to všecky programy co používají zvuk. Zezačátku jsem zkoušel různě downgradovat alsí balíky což taky nepomáhalo. Nikde žádná chybová hláška.

Postupně jsem se metodou pokus omyl dopídil k tomu, že pokud není v asound.conf natvrdo nastavený period_size a buffer_size tak toto nezlobí. Zato se ale objeví nechutné zpoždění zvuku. Odhadem tak okolo 200 milisekund. Při přehrávání muziky to až tak moc nevadí ale ve hrách je to docela hnus. Taky Mumble se občas zblázní a přehrává zvuk sekaně, když má alsa moc veliký buffer.

Nemůžu přijít na to co se změnilo abych to mohl vrátit do stavu, v jakém to bylo zhruba před týdnem. Snesitelné latence, možnost nahrávat a mixovat loopback s mikrofonem ..a tak

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

26.6.2020 07:42 PetebLazar | skóre: 33 | blog: l_eonardovo_odhodlani
Rozbalit Rozbalit vše Re: alsa buffer
Odpovědět | | Sbalit | Link | Blokovat | Admin
O jakou jde distribuci, probehl v mezidobí nějaký update?
26.6.2020 21:00 jejda | skóre: 24 | blog: jejda
Rozbalit Rozbalit vše Re: alsa buffer
Archlinux, ten má rolling updaty. Plácá se jedna verze přes druhou prakticky obden. Občas se něco rozbije ale nebývá to nic kritického a většinou je to za chvilku opraveno.
Josef Kufner avatar 26.6.2020 09:06 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: alsa buffer
Odpovědět | | Sbalit | Link | Blokovat | Admin
To je na ohlášení bugu: https://www.alsa-project.org/wiki/Bug_Tracking
Hello world ! Segmentation fault (core dumped)
26.6.2020 21:05 jejda | skóre: 24 | blog: jejda
Rozbalit Rozbalit vše Re: alsa buffer
To asi nebude bug. To dělá nejspíš ta moje obskurní konfigurace. Teď jsem zjistil, že když se ten zvuk routuje přímo do zvukovky a nepoužije se loopback tak můžu ten buffer nastavit na
period_size 512
buffer_size 2048
a latence jsou v pohodě a CPU se nezapíká.

Pokud si uživatel nenastaví ty buffery ručně, tak se použije defaultních

period_size 6000
buffer_size 18000
to je šíleně moc a proto ten zvuk hraje opožděně.

Jsem si toho předtím nevšiml protože s tak velikým defaultním bufferem se to začalo projevovat až po čtvrthodině souvislého přehrávání.

Takže na vině té zátěže CPU teda není buffer ale může za to ta loopback virtuální zvukovka

Teď ješte přijít na to kde je v tom konfiguráku krpa.
26.6.2020 23:41 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: alsa buffer
Odpovědět | | Sbalit | Link | Blokovat | Admin
Loopback a xonar mají každý své hodiny, přesto je máš spojené přes multi. Možná tomu složitému řetězci vadí, když se začnou trochu rozcházet.

Zkusil bych štelovat hodiny loopbacku hodinami xonaru dle https://www.aktives-hoeren.de/viewtopic.php?p=138938&sid=2527e6a0e3aeaff528a693621f025c14#p138938

Ale raději, než takové hacky, bych se zeptal, proč pro nahrávání výstupního streamu nemůžeš použít pulseaudio, které má na to hotové a funkční pluginy.
10.7.2020 23:18 jejda | skóre: 24 | blog: jejda
Rozbalit Rozbalit vše Re: alsa buffer
Ona ta externí zvukovka sice nese hrdě název "Xonar", no ve skutečnosti se jedná o Asus Xonar U1 . Takové malé stolní hliníkové ufo. Není to žádné profi železo pro netopýry.

Zkoušel jsem například tu externí zvukovku fyzicky odpojit a mixovat ten loopback s interní zvukovkou co je na desce a naopak, tu integrovanou Intelí zvukovku zakázat v biosu a mixovat s loopback s externí. Taky jsem zkusil vrátit defaultní takty na desce (normálně mám nataktováno z 3.0GHz na 3.6GHz). No chová se to furt stejně blbě. Nevypadá to že by na to hardware měl vliv.

Udělal jsem takový pokus:

aplay -vDhw:Loopback,0,0 zvuk.wav
na druhém xtermu jsem pustil:
arecord -Dhw:Loopback,1,0 -f s16_le -c 2 -r 44100 | aplay -Dhw:Device,0,0
a ono to hrálo v pořádku, žádné zvyšování zátěže CPU ani po půlhodině se nekonalo. Ten loopback bude teda nejspíš v pořádku.

Tím se zůžil počet podezřelých na dva. Buď něco hnije v tom alsím směšování mdev multi, nebo mám v tom konfiguráku nejaký konstrukt který je dneska už "obsolete", nebo nevím ...

Nakonec jsem zbaběle vyměknul a nainstaloval pulseaudio. :-) Jsem k tomu měl naučenou nedůvěru z doby tak 10-15 roků zpátky, kdy na to lidi nadávali, furt s tím byl nějaký problém a vůbec jsem to vnímal jako další zbytečný mezikus v cestě audiosignálu. Překvapivě ale dneska pulse funguje. Zátěž CPU zmizela, latence jsou taky v pohodě. Akorát to má takové divné krkolomné názvy zvukovek.

Když chcu nahrávat "loopback" tak to vypadá takto:
ffmpeg -f pulse -i alsa_output.usb-C-Media_Electronics_Inc._USB_Advanced_Audio_Device-00.analog-stereo.monitor .... 
a pro mikrofon:
ffmpeg -f pulse -i alsa_input.usb-C-Media_Electronics_Inc._USB_Advanced_Audio_Device-00.analog-stereo .....
Ale s tím se dá žít. Takže z uživatelského pohledu je problém vyřešen! Ale stejně by mě zajímalo co se podělalo.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.