自動切換監聽音箱和耳機

自動切換監聽音箱和耳機

我的筆記型電腦:

  • 運行 Windows 10(版本 20H2)
  • 有內建揚聲器
  • 有耳機插孔
  • 通常連接到具有揚聲器的顯示器

我想要的聲音是:

  • 從耳機(如果已連接)
  • 從顯示器,如果已連接且耳機未連接
  • 如果未連接任何其他設備,則來自內建揚聲器

有沒有辦法讓播放設備根據這個自動切換?


為什麼這不是小事

我認為這不能透過簡單的預設音訊輸出配置來實現,因為這就是音訊輸出設備的樣子: 播放設備

我想要的播放優先順序是1. Headphones, 2. Monitor, 3. Built-in speaker。筆記型電腦的內建揚聲器和耳機只有一個播放設備(第二個設備是顯示器),因此不能簡單地分別為每個設備設定優先順序。

答案1

下面的腳本未經測試,當然也不在您的環境中,但它可能會有所幫助。

我在這裡使用三個工具:

首先下載工具並將其解壓縮到各自的資料夾中。

然後在所有三個設備都連接的情況下運行不帶參數的 AEPC,它將列出它們的名稱。記下名稱,或至少記下名稱中的識別子字串。目前我不知道它是否會將“揚聲器/耳機”列為一個或兩個設備。如果是一台設備,那麼我假設耳機會自動優先,並且需要縮短腳本。我的腳本假定三個設備,但在執行 AEPC 之前,它們的名稱只是猜測。

安裝AutoHotKey後,將下面的文字放入檔案中.ahk,雙擊進行測試。您可以透過右鍵單擊托盤欄中的綠色 H 圖示並選擇「退出」來停止腳本。若要使其在登入時執行,請將其放置在位於 的啟動群組中 C:\Users\USER-NAME\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

檢查並替換下面使用的字串 findstr指令:

#Persistent                         ; prevents the script from exiting when it reaches 'return'

SetTimer, detectDevices, 1000       ; check every second
return

detectDevices:                      ; this is the timer routine
RunWait,  %ComSpec% /c "C:\Temp\AudioEndPointController\Release\EndPointController.exe" | findstr Headphone
if (%ErrorLevel% = 0) {             ; found headphone
    Run, "C:\Program Files\Nirsoft Package\NirSoft\x64\nircmd.exe" setdefaultsounddevice Headphones
} else {
    RunWait,  %ComSpec% /c "C:\Temp\AudioEndPointController\Release\EndPointController.exe" | findstr Monitor-device
    if (%ErrorLevel% = 0) {         ; found monitor device
        Run, "C:\Program Files\Nirsoft Package\NirSoft\x64\nircmd.exe" setdefaultsounddevice Monitor-name
    } else {                        ; only speaker is left
        Run, "C:\Program Files\Nirsoft Package\NirSoft\x64\nircmd.exe" setdefaultsounddevice Speaker
    }
}
Return                               ; end of timer routine

答案2

使用 Windows 內建的任務規劃程式可以實現這一點。每次 PC 硬體等級發生變化時,都會在 Windows 日誌中觸發事件。任務計劃程式已經偵聽此日誌,因此如果您只是查找另一個事件,您應該不會注意到效能差異。我發現此論壇條目它描述了類似的問題,並且挪威號很好地解釋瞭如何解決它。使用此解決方案,您可以建立一個在插入顯示器時觸發的任務,然後啟動一個更改音訊設備的腳本。沒有更深入的研究,我沒有找到使用 cmd 或 powershell 來完成此操作的方法,但我認為如果您花更多時間在上面,您可以找到一些東西。我唯一發現的是這個帖子StackOverFlow 上提供了多種解決方案,其中一些使用 AutoHotKey(非常簡單的腳本語言)。

我希望這會有所幫助,也許我將來會發現更多,這也是我遇到的問題,然後我會更新我的答案。

答案3

就我個人而言,我的直覺告訴我,如果你走純軟體路線,你可能會永遠為此而苦苦掙扎。

我認為自動配置輸出設備的軟體是可能的,但我不認為有任何一個軟體可以滿足您的要求,如果您讓軟體解決方案正常工作,我認為您會浪費很多時間是時候設定並維護它了。我認為您應該嘗試更可靠且易於配置的硬體解決方案。這裡有一些選項:

  1. 幾乎所有螢幕都有輸入音訊插孔;許多還具有輸出音訊插孔。如果您的顯示器有輸出插孔,我建議您將螢幕設定為預設音頻,並將耳機插入螢幕的輸出音訊。因此,當插入耳機時,您會從耳機中聽到聲音,拔掉耳機,您會從螢幕上聽到聲音,拔下螢幕時,您會從筆記型電腦上聽到聲音。 (檢查螢幕設置,您可能可以選擇插入外部設備時螢幕揚聲器是否仍播放)

  2. 類似的選項,但取得音訊延長線,將筆記型電腦設定為預設值,然後將筆記型電腦的導線插入螢幕輸入插孔。當您想使用耳機時,只需從筆記型電腦上拔下延長線並插入耳機即可。

  3. 我推薦的第二個選擇是使用音訊開關或外部音效卡。您覺得音質對您來說可能很重要嗎?如果是這樣,您可能想在某個時候購買一個好的聲卡以提高音質。現在就做,同時解決這兩個問題。您所需要的只是至少有 2 個輸出,並帶有一個手動開關來選擇您選擇的輸出。那裡有很多選擇,或者音頻開關要便宜得多,但也只是這樣 - 一個帶有一些手動開關和按鈕的硬體。

希望我能提供更多幫助,但我在我的電腦上做了一些測試,這是同樣的問題 - 當您插入/拔出東西時嘗試自動完全更改輸出是一件痛苦的事情。如果是我自己,我知道我會走硬體路線 - 可能在視覺上不太漂亮,但我認為這是最可靠的選擇。

相關內容