Forzar a JavaScript a utilizar un dispositivo de sonido no predeterminado

Forzar a JavaScript a utilizar un dispositivo de sonido no predeterminado

Estoy intentando forzar que una sola página que reproduce audio a través de JavaScript utilice una tarjeta de sonido diferente al resto del navegador (en realidad, al resto del sistema). Mi entendimiento actual es que un navegador no accede directamente al receptor de la tarjeta de sonido, sino que delega en el complemento que desea reproducir audio. En teoría, esto debería hacer posible que JavaScript utilice un receptor de sonido diferente al de Flash o cualquier otro complemento. Si es realmente posible...

Tenga en cuenta que esto no está destinado a ser distribuido, solo intento cambiar la salida en una computadora, a través de la consola o similar.

Respuesta1

¡Es el futuro y ahora es posible! Puede recopilar los resultados disponibles deviceIdutilizando la mediaDevices.enumerateDevicesfunción. Luego aplica lo que desees deviceIda un Audioelemento consetSinkId

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();

Todo lo que queda es aplicar algo de sonido audioconfigurando su campo srco srcObject.

Código relacionado:https://codepen.io/smujmaiku/pen/oNjBmVj

Nota: audio.play()primero requiere cierta interacción del usuario.

También: revisa tus banderashttps://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/setSinkId

Respuesta2

Imposible. Quizás en el futuro, pero por ahora Safari, Chrome, Firefox, Opera y el resto de navegadores ni siquiera tienen opciones en Configuración/Preferencias para cambiarlo. Y como usted sabe, JavaScript funciona en el navegador de Internet y es capaz de hacer lo que él (el navegador de Internet) puede hacer.

Ahora estoy pensando que existe la posibilidad de cambiar esto con Node.js, ya que puedes escribir un paquete/enganche central/módulo externo y poder cambiarlo de alguna manera con javascript, pero el efecto de cambiar la tarjeta de sonido será solo en el servidor. Cliente lateral con Node.js + su módulo.

Si desea cambiar esto (además de que no puede utilizar JavaScript ni el navegador de Internet), puede utilizar el cable de audio virtual.http://en.wikipedia.org/wiki/Virtual_Audio_Cableque es una aplicación para windows.

pregunta similarCambiar el dispositivo de salida de audio en Firefox

información relacionada