强制 JavaScript 使用非默认声音设备

强制 JavaScript 使用非默认声音设备

我正在尝试强制通过 javascript 播放音频的单个页面使用与浏览器其余部分(实际上是系统其余部分)不同的声卡。我目前的理解是,浏览器不直接访问声卡接收器,而是委托给想要播放音频的插件。理论上,这应该可以让 javascript 使用与 flash 或任何其他插件不同的声音接收器。无论这是否真的可能......

请注意,这并非旨在分发,我只是试图通过控制台或类似方式更改一台计算机上的输出。

答案1

这是未来,现在它已经可能了!您可以使用该函数收集可用的输出deviceIdmediaDevices.enumerateDevices然后deviceId使用AudiosetSinkId

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通过设置它srcsrcObject字段来应用一些声音。

相关代码笔: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 和互联网浏览器),你可以使用虚拟音频线http://en.wikipedia.org/wiki/Virtual_Audio_Cable这是一个适用于 Windows 的应用程序。

类似问题更改 Firefox 中的音频输出设备

相关内容