Audio

將 Pulseaudio 接收器重定向到虛擬源

  • November 17, 2020

我正在嘗試將程序的聲音(在我的情況下為 ffmpeg)重定向到一個源,這樣我就可以在 Zoom(影片會議軟體)中播放有問題的聲音。執行此操作的經典方法是選擇 SinkName.monitor 源作為 Zoom 中的聲源,因為每個接收器都帶有一個監視器。但 :

  1. Zoom 不在其麥克風下拉列表中列出監聽源。我嘗試將監視器的 device.class 屬性設置為“聲音”(而不是“監視器”)以欺騙 Zoom 接受它,但無濟於事。

  2. Zoom 似乎拒絕讓你從 pavucontrol 自己設置源。在“錄音”選項卡中,當我嘗試為自己設置另一個由 Zoom 收聽的源時,無論我選擇什麼,我的選擇都會被忽略。下拉選項甚至沒有改變。我在某處讀過創建 ~/.alsoftrc 並寫“

$$ pulse $$" (new line) “allow-moves=yes” 可能會有所幫助,但它對我沒有任何幫助。 因此,我正在嘗試設置自己的來源,並“將聲音重定向到它”。我創建了一個空接收器、一個空源和一個環回,但是在打開 pavucontrol 時,我明白我可能把它弄反了;環回似乎用於將源重定向到接收器,而不是相反(pavucontrol 在播放下說:“MySource 的環回

$$ … $$MySink”,MySink 是右側下拉列表的值)。 有沒有辦法實現我想要做的事情?任何一個:

a) 修改監視器,使其看起來像普通麥克風,或

b) 將接收器的聲音重定向到源?

謝謝。

找到了另一種方法:module-pipe-source。

pactl load-module module-pipe-source source_name=virtualmic file=/tmp/virtualmic format=s16le rate=44100 channels=1

然後:

ffmpeg -re -i movie.mkv -f v4l2 /dev/video2 -f s16le -ar 44100 -ac 1 - > /tmp/virtualmic

(請注意,這也使用模組 v412loopback 偽造網路攝像頭)

以下設置適用於我在 Linux 上與 Zoom 共享應用程序音頻。設置原樣,將您的麥克風和應用程序音頻輸入 Zoom。但是,如最後所述,也可以將其更改為僅使用兩者中的任何一個。

創建一個接收器,我們將在其中混合麥克風和一些應用程序音頻:

pactl load-module module-null-sink sink_name=mix-for-virtual-mic \
sink_properties=device.description=Mix-for-Virtual-Microphone

創建接收應用程序音頻並將其發送到我們的揚聲器和我們剛剛創建的特殊混合接收器的接收器(替換為接收alsa_output….analog-stereo器的名稱,請參閱pactl list sinks short。)

pactl load-module module-combine-sink sink_name=virtual-microphone-and-speakers \
slaves=mix-for-virtual-mic,alsa_output.pci-0000_00_1b.0.analog-stereo

將我們的實際麥克風環回到我們的混音接收器(替換alsa_input…analog-stereo為您的源名稱,請參閱pactl list sources short。)

pactl load-module module-loopback source=alsa_input.pci-0000_00_1b.0.analog-stereo \
sink=mix-for-virtual-mic latency_msec=20

我不清楚 Zoom 如何確定什麼是真正的麥克風。我們不能告訴它使用監視器,但它會監聽echo-cancel(如 Paul 所描述的)。由於沒有我們實際上要取消的迴聲,我們創建了一個假接收器來取消:

pactl load-module module-null-sink sink_name=silence \
sink_properties=device.description=silent-sink-for-echo-cancel

最後,我們創建迴聲消除源,作為 Zoom 檢測到的麥克風:

pactl load-module module-echo-cancel \
sink_name=virtual-microphone source_name=virtual-microphone \
source_master=mix-for-virtual-mic.monitor sink_master=silence aec_method=null \
source_properties=device.description=Virtual-Microphone \
sink_properties=device.description=Virtual-Microphone

現在,Zoom 應該在麥克風部分顯示一個虛擬麥克風。

要將應用程序音頻發送到您的虛擬麥克風,請在 中pavucontrol,將應用程序的接收器設置為 Mix-for-Virtual-Microphone(僅將其發送到虛擬麥克風)或“同時輸出用於 Mix-for-Virtual-Microphone,…”將其發送到麥克風和揚聲器。

請注意,您還可以通過更改 中的“同時輸出…”的音量來靜音或更改虛擬麥克風和揚聲器上的應用程序音頻的音量,而與麥克風的實際音量無關pavucontrol

當然,您可以在“輸入設備”部分將麥克風靜音,以僅共享應用程序音頻。

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