自动在监听音箱和耳机之间切换

自动在监听音箱和耳机之间切换

我的笔记本电脑:

  • 运行 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 个输出,并有一个手动开关来选择要选择的输出。有很多选择,或者音频开关要便宜得多,但仅此而已 - 一个带有一些手动开关和按钮的硬件。

希望我能提供更多帮助,但我在我的电脑上做了一些测试,发现问题是一样的——当你插入/拔出东西时尝试自动完全改变输出很麻烦。如果是我,我知道我会选择硬件路线——可能在视觉上不太美观,但我认为这是你最可靠的选择。

相关内容