Установить аудио конечные устройства для конкретного приложения (программно) - PullRequest
0 голосов
/ 24 октября 2018

Ссылка на отчет об ошибке на «Feedback Hub»


Устройство конечной точки аудио, далее именуемое как «конечная точка», являетсяфизическое или виртуальное устройство вывода или ввода звука.


В обновлении 1803 для Windows 10 за апрель появилось давно назревшее «Громкость приложения и настройки устройства».Эти настройки обеспечивают больший контроль над управлением аудиопотоком, поскольку теперь можно задавать разные конечные точки для разных приложений, независимо от того, идет ли конкретное приложение с выбором конечной точки или нет.

Однако существует проблема, когдаАудио программы, конечная точка которой отличается от заданной по умолчанию, передается через конечную точку по умолчанию (или не обрабатывается вовсе) после ее закрытия и повторного запуска, хотя конечная точка правильно отображается в настройках:

Issue Recreation

Насколько я знаю, проблему можно воссоздать на компьютере с Windows 10 (версия 1803 или выше) с любой виртуальной или физической конечной точкой и уязвимой программой.В этом примере я использовал VLC Media Player (не учитывая тот факт, что он поставляется с выбором конечной точки), поскольку он хорошо известен и широко доступен, что должно упростить воссоздание проблемы.


То, что я ищу ...

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

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

  • Определенные конечные точки и путь к экземпляру устройства, которое они используют, можно получить из подразделов ключа HKEY_USERS\# YOUR SID #\Software\Microsoft\Multimedia\Audio\DefaultEndpoint.Я не знаю, как Windows генерирует имя подразделов или где их можно найти.Если бы мне пришлось делать какие-то догадки, я бы сказал, что это идентификаторы приложений (не стесняйтесь исправлять меня, если я ошибаюсь).
  • Сам путь к экземпляру устройства можно найти в диспетчере устройств (в разделе«Аудиовходы и выходы» дважды щелкните нужное устройство, перейдите на вкладку «Сведения» и выберите «Путь к экземпляру устройства» в раскрывающемся меню «Свойства»).
  • Дополнительно запись о Конечные аудиоустройства и Управление потоками в Документах Microsoft могут быть полезны, но это намного выше моей головы.

Возможно, но нецелесообразноОбходной путь ...

... заключается в ручном задании другой конечной точки для приложения и переключении обратно на желаемую конечную точку при каждом запуске указанного приложения (как показано выше).

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

Альтернативаo последнее заключается в том, что звук не будет передаваться вообще или в некоторых случаях он действительно работает .

например: VLC Media Player, Tom Clancy's Rainbow Six Siege (хотя звук будет транслироваться правильно во время заставок)

Например: Call of Duty 4: ModernВойна, 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, и я вижу это как проблему, которая затрагивает не только меня, и этополезно для нескольких людей после меня.Не стесняйтесь написать комментарий или предложить редактирование, если вы видите это по-другому.

Я также не уверен, следует ли использовать в этом контексте теги 'streaming' и 'endpoint', пожалуйста, предложитередактировать, если они не должны, или вы можете придумать что-нибудь лучше.



Редактировать - 05/11 / 18

Используя стороннее программное обеспечение EarTrumpet, я смогоднако, чтобы решить проблему с играми Call of Duty (после перезапуска вообще нет звука), «VLC Media Player» не перезапустился бы после того, как я назначил конечную точку не по умолчанию с помощью «EarTrumpet», пока я снова не закрою «EarTrumpet»и проблема с «Радугой шестой осады Тома Клэнси» осталась прежней.


Редактировать - 18/01/19

Добавлена ​​ссылка на отчет об ошибке Iсоздан в 'Feedback Hub' 2 месяца назад.


Редактировать - 20/01/19

После повторного тестирования следует отметить, что при запуске EarTrumpet вфон будет сохранять конечную точку не по умолчанию для 'VLC Media Player' across перезапускается, однако «VLC Media Player» будет (надежно) перезапускаться только тогда, когда конечная точка не по умолчанию была задана в «Громкости приложения и настройках устройства».

1 Ответ

0 голосов
/ 04 ноября 2018

У меня нет решения относительно языка программирования для обработки таких событий.

Но я могу рекомендовать приложение 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=pivot:overviewtab)

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

...