Мой ноутбук:
- работает под управлением Windows 10 (версия 20H2)
- имеет встроенные динамики
- имеет разъем для наушников
- обычно подключается к монитору с динамиками
Я хочу, чтобы раздался звук:
- из наушников, если они подключены
- с монитора, если он подключен, а наушники нет
- через встроенные динамики, если ничего больше не подключено
Есть ли способ сделать так, чтобы устройство воспроизведения автоматически переключалось в соответствии с этим?
Почему это не тривиально
Я думаю, что этого нельзя добиться с помощью простой конфигурации аудиовыхода по умолчанию, поскольку вот как выглядят устройства аудиовыхода:
Мой желаемый приоритет воспроизведения — 1. Headphones, 2. Monitor, 3. Built-in speaker
. Для встроенного динамика ноутбука и наушников (второе устройство — монитор) есть только одно устройство воспроизведения, поэтому приоритет нельзя просто установить для каждого из них по отдельности.
решение1
Приведенный ниже скрипт не тестировался и, конечно же, не будет работать в вашей среде, но он может оказаться полезным.
Я использую здесь три инструмента:
- Очень полезноNirCmd от NirSoft.
- TheКонтроллер конечной точки аудио которые можно загрузить из интернет-архивов с здесь(инструмент находится в подпапке "Release"). Для краткости я буду называть его AEPC.
- AutoHotkey.
Сначала скачайте инструменты и распакуйте их в соответствующие папки.
Затем запустите 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
Лично я чувствую, что если вы пойдете по пути исключительно программного обеспечения, то вам, возможно, придется бороться с этим вечно.
Я думаю, что программное обеспечение, которое автоматически настраивает ваше выходное устройство, возможно, но я не думаю, что есть какая-то одна доступная программа, которая будет делать то, что вам нужно, и если вы получите работающее программное решение, я думаю, вы потратите много времени на его настройку и поддержку. Я думаю, вам следует попробовать аппаратное решение, которое более надежно и легко настраивается. Вот несколько вариантов:
Почти все экраны имеют входной аудиоразъем; и многие также имеют выходной аудиоразъем. Если у вашего монитора есть выходной разъем, я рекомендую вам установить экран в качестве аудиоустройства по умолчанию и подключить наушники к выходному аудиоразъему экрана. Таким образом, когда ваши наушники подключены, вы получаете звук из наушников, отключите их, и вы получите звук с экрана, и отключите экран, и вы получите звук с ноутбука. (проверьте настройки экрана, у вас могут быть параметры, касающиеся того, будут ли динамики экрана продолжать воспроизводить звук при подключении внешнего устройства)
Похожий вариант, но возьмите аудиоудлинитель, установите ноутбук в качестве устройства по умолчанию и подключите провод от ноутбука к входному разъему экрана. Когда вы захотите использовать наушники, просто отсоедините удлинитель от ноутбука и подключите наушники.
Второй вариант, который я бы рекомендовал, — это приобрести аудиопереключатель или внешнюю звуковую карту. Кажется, что качество звука может быть для вас важно? Если так, то вы можете в какой-то момент купить хорошую звуковую карту для улучшения качества звука. Сделайте это сейчас и решите обе проблемы сразу. Все, что вам нужно, это как минимум 2 выхода на нем с ручным переключателем для выбора нужных выходов. Существует множество вариантов, или аудиопереключатель намного дешевле, но это всего лишь часть оборудования с несколькими ручными переключателями и кнопками на нем.
Хотел бы я быть более полезным, но я провел некоторые испытания на своем ПК, и проблема та же самая - попытка автоматически полностью изменить выход, когда вы подключаете/отключаете что-либо - это больно. Если бы это был я, я знаю, что пошел бы по аппаратному пути - может быть, это не очень красиво визуально, но я думаю, что это самый надежный вариант, который у вас есть.