我正在尝试强制通过 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
字段来应用一些声音。
相关代码笔: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 的应用程序。