Заставить JavaScript использовать звуковое устройство, отличное от устройства по умолчанию

Заставить JavaScript использовать звуковое устройство, отличное от устройства по умолчанию

Я пытаюсь заставить одну страницу, которая воспроизводит звук через javascript, использовать другую звуковую карту, нежели остальная часть браузера (на самом деле, остальная часть системы). Насколько я понимаю, браузер не обращается напрямую к приемнику звуковой карты, а делегирует это плагину, который хочет воспроизвести звук. Теоретически это должно позволить javascript использовать другой приемник звука, нежели flash или любой другой плагин. Возможно ли это на самом деле...

Обратите внимание, что это не предназначено для распространения, я лишь пытаюсь изменить вывод на одном компьютере через консоль или что-то подобное.

решение1

Это будущее, и теперь это возможно! Вы можете собрать доступные выходные данные deviceIdс помощью mediaDevices.enumerateDevicesфункции. Затем примените желаемое deviceIdк Audioэлементу с помощьюsetSinkId

const devices = await navigator.mediaDevices.enumerateDevices();
const outputs = devices.filter(({ kind }) => kind === 'audiooutput');
const output = outputs[1]; // Choose a device

const audio = new Audio();
audio.setSinkId(output.deviceId);
audio.play();

Осталось только применить какой-нибудь звук, audioустановив его srcполе srcObject.

Связанный codepen:https://codepen.io/smujmaiku/pen/oNjBmVj

Примечание: audio.play()сначала требуется некоторое взаимодействие с пользователем.

Также: Проверьте свои флагиhttps://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/setSinkId

решение2

Невозможно. Может быть в будущем, но сейчас Safari, Chrome, FireFox, Opera и остальные браузеры не имеют даже опций в Настройках/Предпочтениях, чтобы изменить это. И как вы знаете, javascript работает в интернет-браузере и способен делать то, что они (интернет-браузеры) могут делать.

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

Если вы хотите это изменить (кроме того, вы не можете использовать JavaScript и интернет-браузер), вы можете использовать Virtual Audio Cable.http://en.wikipedia.org/wiki/Виртуальный_Аудиокабелькоторое является приложением для Windows.

Похожий вопросИзмените устройство вывода звука в Firefox

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