從 bash 腳本中,透過內部揚聲器播放聲音,同時使它們有效禁用

從 bash 腳本中,透過內部揚聲器播放聲音,同時使它們有效禁用

我之前發布了一個類似的問題,但卡米爾·馬喬羅夫斯基正確而明智地指出,正如發布的那樣,這並不是真正的單一問題,而是3 個問題的混合體。了損壞的系統和問題。我將重新安裝目前的 Lubuntu。開箱後,如果我打開藍牙耳機,聲音會透過耳機播放,而不是透過內建揚聲器播放。如果我關閉耳機,聲音會自動透過揚聲器播放。

我希望永遠不會有任何聲音發送到揚聲器,除非我明確地將特定命令的輸出定向到它們。就像偽代碼一樣:aplay /path/fire-alarm.wav -o speakers並透過耳機播放所有其他聲音(如果可用),否則根本不播放。

如果沒有直接規定此類策略,我想知道是否有某種方法可以欺騙系統將 /dev/null 視為始終工作且始終可用的音訊接收器,該接收器排在耳機之後並排在前面的內部揚聲器。結合“透過揚聲器播放此聲音”命令應該可以做到這一點。

如果這兩種方法都不可能,則在不影響耳機功能且無需重新登入的情況下禁用和啟用揚聲器的命令幾乎也能達到目的,前提是拜占庭Linux 聲音架構中的某些內容不會自發地決定“哦,你的揚聲器是關掉了,我會幫你解決的。”

這與簡單地說藍牙耳機應該是預設耳機不同。現在就是這樣。如果我觀看“DebbieDosDubai”並且耳機超出範圍,或者電量耗盡,或者我只是笨手笨腳地用手指將它們取下來試圖調整它們的物理位置,我不希望聲音自動切換以開始出現的發言者。

我所追求的是一種策略,除非我明確告訴它向那裡發送特定的流,否則不會向揚聲器發送任何內容,然後僅發送該流,或者如果失敗,則以可編寫腳本的方式禁用和啟用揚聲器而無需重新登入。

答案1

PULSE_SINK=<sink_name> 某個程序

您可以從以下位置取得可用「sink_name」的清單:

LANG=C pactl list | grep -A2 'Sink #' | grep Name: | cut -d" " -f2

相關內容