Автоматическое переключение между динамиками монитора и наушниками

Автоматическое переключение между динамиками монитора и наушниками

Мой ноутбук:

  • работает под управлением Windows 10 (версия 20H2)
  • имеет встроенные динамики
  • имеет разъем для наушников
  • обычно подключается к монитору с динамиками

Я хочу, чтобы раздался звук:

  • из наушников, если они подключены
  • с монитора, если он подключен, а наушники нет
  • через встроенные динамики, если ничего больше не подключено

Есть ли способ сделать так, чтобы устройство воспроизведения автоматически переключалось в соответствии с этим?


Почему это не тривиально

Я думаю, что этого нельзя добиться с помощью простой конфигурации аудиовыхода по умолчанию, поскольку вот как выглядят устройства аудиовыхода: Устройства воспроизведения

Мой желаемый приоритет воспроизведения — 1. Headphones, 2. Monitor, 3. Built-in speaker. Для встроенного динамика ноутбука и наушников (второе устройство — монитор) есть только одно устройство воспроизведения, поэтому приоритет нельзя просто установить для каждого из них по отдельности.

решение1

Приведенный ниже скрипт не тестировался и, конечно же, не будет работать в вашей среде, но он может оказаться полезным.

Я использую здесь три инструмента:

Сначала скачайте инструменты и распакуйте их в соответствующие папки.

Затем запустите AEPC без параметров, пока все три устройства подключены, и он выведет список их имен. Запишите имена или, по крайней мере, идентифицирующую подстроку внутри имени. На данный момент я не знаю, будет ли он выводить "Speaker/Headphone" как одно или два устройства. Если одно устройство, то я предполагаю, что Headphone автоматически имеет приоритет, и сценарий нужно сократить. Мой сценарий предполагает три устройства, но их имена являются лишь предположением, пока вы не запустите AEPC.

После установки AutoHotKey поместите текст ниже в .ahkфайл и дважды щелкните по нему для проверки. Вы можете остановить скрипт, щелкнув правой кнопкой мыши по зеленому значку H в трее и выбрав Exit. Чтобы он запускался при входе в систему, поместите его в группу Startup в 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 планировщика задач. Каждый раз, когда что-то меняется на аппаратном уровне вашего ПК, это запускает событие в журнале Windows. Планировщик задач уже прослушивает этот журнал, поэтому вы не заметите разницы в производительности, если просто посмотрите на другое событие. Я нашелэта запись форумакоторый описывает похожую проблему, иussnorwayдал очень хорошее объяснение, как решить эту проблему. Используя это решение, вы можете создать задачу, которая запускается при подключении монитора, а затем запускает скрипт, который меняет аудиоустройство. Без более глубокого исследования я не нашел способа сделать это с помощью cmd или powershell, но я думаю, что вы можете найти что-то, если потратите на это больше времени. Единственное, что я нашел, этоэта почтана StackOverFlow, где представлено несколько решений, некоторые из которых используют AutoHotKey — очень простой язык сценариев.

Надеюсь, это поможет, возможно, в будущем я найду что-то еще. Я тоже столкнулся с этой проблемой, тогда я обновлю свой ответ.

решение3

Лично я чувствую, что если вы пойдете по пути исключительно программного обеспечения, то вам, возможно, придется бороться с этим вечно.

Я думаю, что программное обеспечение, которое автоматически настраивает ваше выходное устройство, возможно, но я не думаю, что есть какая-то одна доступная программа, которая будет делать то, что вам нужно, и если вы получите работающее программное решение, я думаю, вы потратите много времени на его настройку и поддержку. Я думаю, вам следует попробовать аппаратное решение, которое более надежно и легко настраивается. Вот несколько вариантов:

  1. Почти все экраны имеют входной аудиоразъем; и многие также имеют выходной аудиоразъем. Если у вашего монитора есть выходной разъем, я рекомендую вам установить экран в качестве аудиоустройства по умолчанию и подключить наушники к выходному аудиоразъему экрана. Таким образом, когда ваши наушники подключены, вы получаете звук из наушников, отключите их, и вы получите звук с экрана, и отключите экран, и вы получите звук с ноутбука. (проверьте настройки экрана, у вас могут быть параметры, касающиеся того, будут ли динамики экрана продолжать воспроизводить звук при подключении внешнего устройства)

  2. Похожий вариант, но возьмите аудиоудлинитель, установите ноутбук в качестве устройства по умолчанию и подключите провод от ноутбука к входному разъему экрана. Когда вы захотите использовать наушники, просто отсоедините удлинитель от ноутбука и подключите наушники.

  3. Второй вариант, который я бы рекомендовал, — это приобрести аудиопереключатель или внешнюю звуковую карту. Кажется, что качество звука может быть для вас важно? Если так, то вы можете в какой-то момент купить хорошую звуковую карту для улучшения качества звука. Сделайте это сейчас и решите обе проблемы сразу. Все, что вам нужно, это как минимум 2 выхода на нем с ручным переключателем для выбора нужных выходов. Существует множество вариантов, или аудиопереключатель намного дешевле, но это всего лишь часть оборудования с несколькими ручными переключателями и кнопками на нем.

Хотел бы я быть более полезным, но я провел некоторые испытания на своем ПК, и проблема та же самая - попытка автоматически полностью изменить выход, когда вы подключаете/отключаете что-либо - это больно. Если бы это был я, я знаю, что пошел бы по аппаратному пути - может быть, это не очень красиво визуально, но я думаю, что это самый надежный вариант, который у вас есть.

Связанный контент