Установка аудио конечных устройств для конкретного приложения (программно)
Ссылка на отчет об ошибке в "Feedback Hub"
Конечное аудиоустройство, далее называемое "конечная точка", является физическим или виртуальным аудиовыходом или устройством ввода.
В обновлении 1803 для Windows 10 за апрель появилось давно назревшее "Громкость приложения и настройки устройства". Эти настройки обеспечивают больший контроль над управлением аудиопотоком, поскольку теперь можно задавать разные конечные точки для разных приложений, независимо от того, поставляется ли конкретное приложение с выбором конечной точки или нет.
Однако существует проблема, из-за которой аудио программы, конечная точка которой отличается от заданной по умолчанию, передается через конечную точку по умолчанию (или вовсе не передается) после ее закрытия и повторного запуска, хотя конечная точка правильно отображается в настройках:
Насколько я знаю, проблему можно воссоздать на компьютере с Windows 10 (версия 1803 или выше) с любой виртуальной или физической конечной точкой и уязвимой программой. В этом примере я использовал "VLC Media Player" (не принимая во внимание тот факт, что он поставляется с выбором конечной точки), поскольку он хорошо известен и широко доступен, что должно упростить воссоздание проблемы.
Что я ищу...
... является программным решением для переключения между конечными точками, которое в идеале может быть запущено в форме скрипта для установки правильной конечной точки при запуске приложения.
Для моей цели было бы достаточно вручную настроить путь к экземпляру устройства, поскольку устройство всегда будет одинаковым, но я не собираюсь жаловаться на решение, которое также извлекает путь к экземпляру устройства из реестра.
- Определенные конечные точки и путь к экземпляру устройства, которое они используют, могут быть получены из подразделов ключа
HKEY_USERS\# YOUR SID #\Software\Microsoft\Multimedia\Audio\DefaultEndpoint
. Я не знаю, как Windows генерирует имя подразделов или где их можно найти. Если бы мне пришлось делать дикие предположения, я бы сказал, что это идентификаторы приложений (не стесняйтесь поправлять меня, если я ошибаюсь). - Сам путь к экземпляру устройства можно найти в диспетчере устройств (в разделе "Аудиовходы и выходы" дважды щелкните нужное устройство, перейдите на вкладку "Сведения" и выберите "Путь к экземпляру устройства" в раскрывающемся меню "Свойства").,
- Кроме того, может быть полезна запись об аудио оконечных устройствах и управлении потоками в Документах Microsoft, но это намного выше моей головы.
Возможный, но непрактичный обходной путь...
... будет вручную устанавливать другую конечную точку для приложения и переключаться обратно на желаемую конечную точку при каждом запуске указанного приложения (как показано выше).
Но не только это занимает не менее 10 секунд при каждом запуске, вы можете даже забыть сделать это, поскольку звук может просто передаваться через конечную точку по умолчанию *¹
.
Альтернатива последнему состоит в том, что звук не будет передаваться вообще *²
или в некоторых случаях он действительно работает *³
.
*¹
например: VLC Media Player, Tom Clancy Rainbow Six Siege (хотя звук будет транслироваться правильно во время заставок)
*²
например: Call of Duty 4: Modern Warfare, Call of Duty: Modern Warfare 2, Call of Duty: Modern Warfare 3
*³
например: Windows Media Player, Microsoft Edge, Firefox
наблюдения
- VLC Media Player поставляется с выбором конечной точки, как и TeamSpeak 3, и, в отличие от VLC, он полностью пропускает настройки Windows.
- Call of Duty без потоковой передачи аудио, скорее всего, подключен к движку, так как я не встречал никаких других приложений, делающих что-то подобное.
- Windows Media Player, Microsoft Edge и Firefox - единственные программы (которые я тестировал до сих пор), которые работают нормально. У них нет выбора конечной точки (я бы знал об этом), и они будут использовать правильную конечную точку после закрытия и повторного запуска. Однако следует отметить, что Firefox и Microsoft Edge будут отображать несколько экземпляров в разделе "Громкость приложения и настройки устройства" при настройке конечной точки.
отказ
Я уже пробовал два сторонних программного обеспечения: "Audio Router", которое не работало вообще, и "CheVolume", которое не решало проблему и постоянно зависало при этом.
Этот вопрос основан на одном вопросе, который я задал в Super User (здесь), где я не получил ответ, с которым мне удалось поработать из-за недостатка знаний о реальном программировании (я только немного знаком с Batch и PowerShell). Мне хорошо известно, что ни переполнение стека, ни суперпользователь не являются службами написания сценариев, однако проблема не устраняется с помощью обновления 10 октября 1809 для Windows 10, и я вижу это как проблему, которая затрагивает не только меня, и это полезно для нескольких людей после меня. Не стесняйтесь написать комментарий или предложить изменение, если вы видите это по-другому.
Я также не уверен, следует ли использовать в этом контексте теги "потоковое аудио" и "конечная точка". Пожалуйста, предложите изменить, если они не должны, или вы можете придумать что-нибудь лучше.
Редактировать - 05/11/18
Используя стороннее программное обеспечение EarTrumpet, я смог преодолеть проблему с играми Call of Duty (нет звука вообще после перезапуска), однако VLC Media Player не перезапустился бы после того, как я назначил конечную точку не по умолчанию. с "EarTrumpet", пока я снова не закрою "EarTrumpet", и проблема с "Tom Clancy Rainbow Six Siege" остается прежней.
Изменить - 18/01/19
Добавлена ссылка на сообщение об ошибке, которое я создал в "Центре обратной связи" 2 месяца назад.
Редактировать - 20/01/19
После повторного тестирования следует заметить, что при запуске "EarTrumpet" в фоновом режиме конечная точка не по умолчанию для "VLC Media Player" будет перезапускаться, однако "VLC Media Player" будет (надежно) перезапускаться только тогда, когда Конечная точка -default была установлена в "Громкости приложения и настройках устройства".
Ответы
Ответ 1
У меня нет никакого решения относительно языка программирования для обработки таких событий.
Но я могу рекомендовать приложение EarTrumpet для более быстрой обработки этих изменений https://www.theverge.com/2018/6/13/17457778/eartrumpet-windows-10-audio-app
(Windows магазин: https://www.microsoft.com/en-us/p/eartrumpet/9nblggh516xp?ranMID=24542&ranEAID=nOD%2FrLJHOac&ranSiteID=nOD_rLJHOac-hUn6PgKuMKwQLdrzRqnPTA&epi=nOD_rLJHOac-hUn6PgKuMKwQLdrzRqnPTA&irgwc=1&OCID=AID681541_aff_7593_1243925&tduid=%28ir__qwqlg6jd0jba3y9hpnbvikaite2xk6kuyv9udtr100%29%287593 % 29% 281243925% 29% 28nOD_rLJHOac-hUn6PgKuMKwQLdrzRqnPTA% 29% 28% 29 & irclickid = _qwqlg6jd0jba3y9hpnbvikaite2xk6kuyv9udtr100 & activetab = сводка):
Я обновлю ответ, если найду простой способ написать скрипт/запрограммировать изменение вывода в каждом приложении.