Portál AbcLinuxu, 4. května 2025 07:24
Takhle jsem jednou strčil DVD do počítače, spustil ho v kaffeine, osolil repro a nestačil se divit nad vyluzovanými zvuky.
Většinou když poslouchám jen tak empétrojky, tak jen potichu šumí, to že to hraje všelijak už tuším dost dlouho. Teprve tohle mě ale nakoplo a já jsem se začal zajímat co s tím.
Zaprvé jsem chtěl, aby když budu přehrávat surround sound (4.0, 4.1, 5,0, 5.1, 7.1), aby se mi hloubky ze satelitů posílaly do subwooferu, protože nemám megalomanské repro, spíš taková chrastítka :). Za druhé subwoofer nemá filtr který by odřízl výšky.
Zadání zní celkem jednoduše. První bod je splnitelný velmi snadno, ALSA má plugin route, který má požadovaný efekt. Druhý bod je trošku obtížnější a s jeho řešením jsem strávil hodně času, ale i to nakonec funguje a výsledkem je tato konfigurace:
# /etc/asound.conf # hlasitost mixovaných zdrojů pcm.volume { type softvol slave.pcm "lowpass_in" control { name "Master (mix)" card 0 } } # hlasitost pro upmixované mono a stereo pcm.volume_upmix { type softvol slave.pcm "volume" control { name "Master (upmix)" card 0 } } # nízkofrekvenční filtr s rezonancí pcm.lowpass_in { type plug slave { pcm lowpass channels 6 rate 44100 } } pcm.lowpass { type ladspa slave.pcm lowpass_out path "/usr/lib/ladspa" channels 6 plugins { 0 { id 1098 policy duplicate input.bindings.0 "Input"; output.bindings.0 "Output"; } 1 { id 1672 policy none input.bindings.5 "Input"; output.bindings.5 "Output"; input { controls [ 120 2.2 ] # [ frekvence rezonance ] } } } } pcm.lowpass_out { type plug slave { pcm surround51 channels 6 } } # mixování zdrojů pcm.mix10 { type route slave.pcm "volume_upmix" slave.channels 6 ttable { 0.0 1 0.1 1 0.2 1 0.3 1 0.4 1 0.5 1 } } pcm.mix20 { type route slave.pcm "volume_upmix" slave.channels 6 ttable { 0.0 1 1.1 1 0.2 1 1.3 1 0.4 0.5 1.4 0.5 0.5 0.5 1.5 0.5 } } pcm.mix40 { type route slave.pcm "volume" slave.channels 6 ttable { 0.0 1 1.1 1 2.2 1 3.3 1 0.4 0.5 1.4 0.5 0.5 0.25 1.5 0.25 2.5 0.25 3.5 0.25 } } pcm.mix41 { type route slave.pcm "volume" slave.channels 6 ttable { 0.0 1 1.1 1 2.2 1 3.3 1 0.4 0.5 1.4 0.5 0.5 0.25 1.5 0.25 2.5 0.25 3.5 0.25 4.5 1 } } pcm.mix50 { type route slave.pcm "volume" slave.channels 6 ttable { 0.0 1 1.1 1 2.2 1 3.3 1 4.4 1 0.5 0.25 1.5 0.25 2.5 0.25 3.5 0.25 4.5 0.25 } } pcm.mix51 { type route slave.pcm "volume" slave.channels 6 ttable { 0.0 1 1.1 1 2.2 1 3.3 1 4.4 1 5.5 1 0.5 0.25 1.5 0.25 2.5 0.25 3.5 0.25 4.5 0.25 } } pcm.mix71 { type route slave.pcm "volume" slave.channels 6 ttable { 0.0 1 1.1 1 2.2 1 3.3 1 4.4 1 5.5 1 0.5 0.16 1.5 0.16 2.5 0.16 3.5 0.16 4.5 0.16 6.5 0.16 7.5 0.16 6.0 0.5 6.2 0.5 7.1 0.5 7.3 0.5 } }
O co tedy jde? je to jednoduché, v přehrávači se nastaví patřičné výstupní zařízení, tedy například v xine se pro 5.1 výstup dá mix51.
Potom se zvuk vstupující do mix51 rozmixuje do kanálů podle tabulky (tedy 0,25% signálu ze satelitu se pošle do subooferu), celková hlasitost se bude dát upravit v mixéru šoupátkem Master (mix), podobně je to i u mona a sterea, tam je ovšem jěště jedno šoupátko, protože upmixované zdroje byly děsně uřvané.
Po upravení hlasitosti putuje zvuk do lowpass_in kde je převzorkován, to je důležité, protože bez tohoto mi po pokusu něco přehrát okamžitě spadlo xine. Můžete si zvolit libovolnou frekveci, já jsem nechal obligátních 44100Hz, 48000Hz značně vytězuje CPU.
Teď už se nacházíme v lowpass filtru, ten se skládá ze dvou pluginů, ten první nedělá nic jiného, než že pošle na prvních 5 kanálů identický signál jako obdržel, druhý plugin je zajímavější, ten právě ořeže výšky. Dají se v něm nastavit hodnoty frekvence a rezonance, frekvence je jasná, podle specifikace surround zvuku má být 120Hz, rezonanci je pak potřeba vyladit podle velikosti subwooferu od 0.0 do 4.0.
Nakonec se konečně přes lowpass_out dostáváme do zvukové karty, přesněji na její pcm.surround51.
Při používání tohoto nastavení si filtry a softwarové hlasitosti vyžádají kolem 5% CPU (Athlon64 přiškrcený na 1000MHz), ovšem konečně je to pak poslouchatelné :).
Konfigurace je ušitá na míru pro moji obstarožní SoundBlaster Live! 5.1 Digital [SB0220], no pořád lepší než ta integrovaná co nemá ani HW mixer ;). Pro lowpass filtr je třeba mít balíčky blop ladspa (tak se jmenují v Archu).
Domácí stránky ALSA
Neoficiální wiki o ALSA
Tiskni
Sdílej:
.asoundrc
jsem přidal
> cat .asoundrc pcm.!default { type plug slave.pcm "vystup" } pcm.vystup { type dmix ipc_key 1024 slave { pcm "hw:0,0" period_time 0 period_size 1024 buffer_size 4096 rate 44100 } } pcm.dsp0 { type plug slave.pcm "dmix" } >A open arena mi jede v klidu s metal express radio
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.