Alsa

如何將 dmix 與 ladspa 外掛結合到預設設備

  • January 26, 2015

有一段時間,我已經放棄了所有的聲音守護程序,只用了 dmix 外掛就過上了幸福的生活。然而,最近我對 youtube 影片的不同音量感到惱火,並決定插入壓縮器和限制器。恕我直言,這是一個非常理想的設置。

但很可惜,我沒有運氣。我讓播放工作或捕捉,但從來沒有兩者兼而有之。我想根本的問題是我缺乏理解,所以我的基本問題是:

  • 我在哪裡可以找到關於 alsa 和 .asoundrc 的良好文件,這些文件不僅僅是範例,還可以解釋我得到的錯誤消息(見下文)。
  • 有沒有人在包含 ladspa 外掛的無守護聲音設置中取得成功?
  • 有人知道原因,甚至是我的特定問題的解決方案(如下所述)嗎?

對於那些有耐心追隨我的困境的人來說,他們來了。我已經能夠播放這樣的聲音了

aplay -D ladspaChain /usr/share/skype/sounds/CallBusy.wav

但我無法通過預設設備播放。

pcm.!default {
   type plug
   slave.pcm {
   type asym
   playback.pcm "ladspaChain"
   capture.pcm "dsnooper"
  }
}

沒有-D ladspaChain,我得到

aplay: pcm_params.c:170: snd1_pcm_hw_param_get_min: Assertion `!snd_interval_empty(i)' failed.**

或者我試過

pcm.!default {
   type route
   slave.pcm {
   type asym
   playback.pcm "ladspaChain"
   capture.pcm "dsnooper"
  }
   ttable {
       0.0     1       # left channel
       1.1     1       # right channel
   } 
} 

在這種情況下,播放有效,但 arecord 給了我

arecord: set_params:1081: Sample format non available
Available formats:
- S32_LE

我在https://forums.gentoo.org/viewtopic-t-733367-start-0.html上找到了一個完整的答案(這與 Permat 和 Ramesh 的答案非常吻合):

ciaranhearne:“基本上我必須先將 Dmix 定義為外掛,然後才能使用它”

雖然這僅適用於 alsa,但我無法讓 pulsaudio/ apulse工作(對於 skype)。當我將脈衝設置為直接使用 dmix 時,它起作用了,但它獨占了設備並且 alsa 不再起作用。讓脈衝使用遠離卡的 pcms 根本不起作用。

解決方案是創建兩個 dmixes。我現在有

  • 一種永久插入 ladspa 外掛的方法(在我的情況下是限制器)
  • 預設設備工作(firefox很高興)
  • 沒有脈衝音頻
  • Skype 仍然通過 apulse 工作

導出 APULSE_PLAYBACK_DEVICE=plug:duplexPulse

脈衝Skype

這是我現在的 .asoundrc

#--------------------------------------------------
# Cards
#--------------------------------------------------
pcm.audiophile {
   type hw
   card 0
}

ctl.audiophile {
   type hw
   card 0
}


#--------------------------------------------------
# Normal alsa
#--------------------------------------------------
pcm.!default {
   type plug
   slave.pcm "duplex"
} 

pcm.duplex {
   type asym
   playback.pcm "ladspa"
   capture.pcm "dsnooper"
}


# --- ladspa chain ---
   
pcm.ladspa {
 type ladspa
 slave.pcm "dmixplug"
 path "/usr/lib/ladspa";
 plugins [
   {
   label fastLookaheadLimiter
   input {
       #InputGain(Db) Limit (db) Release time (s) 
       controls [ 9 -3 10]
       }
   
   }]
}



pcm.dmixplug {
 type plug
 slave.pcm "dmixer"
}


pcm.dmixer {
   type dmix
   ipc_key 1234
   slave {
       pcm "audiophile"
       period_size 1024
       buffer_size 4096
       rate 44100
   }
} 

pcm.dsnooper {
   type dsnoop
   ipc_key 2048
   ipc_perm 0666 
   slave.pcm "audiophile"
   slave 
   {
       period_time 0
       period_size 1024
       buffer_size 4096
       rate 44100
   }
   bindings {
       0 0
       1 1
   }
}

#--------------------------------------------------
# special entries for pulseaudio/apulse
#--------------------------------------------------

pcm.duplexPulse {
   type asym
   playback.pcm "dmixerPulse"
   capture.pcm "dsnooper"
}

pcm.dmixerPulse {
   type dmix
   ipc_key 1234
   slave {
       pcm "audiophile"
       period_size 1024
       buffer_size 4096
       rate 44100
   }
} 

使用外掛(也接受表格)而不是路由作為類型,這意味著您可以跳過一級嵌套。

引用自:https://unix.stackexchange.com/questions/106270