HTML5音频输出路由补丁

5
我想知道在HTML5/JavaScript中是否有方法控制音频输出设备? 比如,如果用户想让我的Web应用程序中的一个声音从一个音频设备输出,另一个声音从另一个音频设备输出。 我知道用户可以在计算机上设置默认输出设备,但对于我正在处理的Web应用程序,我希望他们能够将单独的声音发送到单独的输出设备,同时其他声音正在播放,类似于下面的界面(来自名为QLab的程序)。我感觉明显的答案是否定的,我不想使用Flash或Java。我可能需要编写一些与JavaScript接口的浏览器插件。

这是可能的。Web Audio API在音频输出设备API草案文档中有表达式,它将为您提供服务。现在Chromium正在制作这些功能,那么也许您可以在不久的将来尝试一下。 - ltsmith
5个回答

9
因为没有得到任何有用的答案,也没有找到更多有用信息,所以我认为我们作为开发人员需要开始向浏览器供应商和w3c请求硬件访问权限。我们需要能够类似地请求用户的位置或推送通知一样请求用户的硬件访问。在网页开发人员被允许像本地应用程序开发人员一样控制硬件之前,我们将处于一个巨大的劣势,无法为用户提供更好的体验。我不想让我的用户安装第三/第四方插件来获得对其I/O的更多控制/访问权限。用户不应该被强制保持更新比他们的Web浏览器还多的软件,以使网站运行良好且安全。而且,我认为没有必要编写除HTML、JavaScript、CSS和PHP之外的语言,就可以获得与本地应用程序相同的使用体验。我不知道如何接触浏览器供应商,但我认为开始这样做会是一个好的开始。

7

我知道这可能有点过时,但是今年新增了一种方法叫做“setSinkId”,你可以将其应用于媒体元素(视频、音频),以设置音频输出的设备。

$('#video-element').setSinkId('default');

https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLMediaElement/setSinkId

目前似乎只有Chrome支持此功能。我还没有在Firefox或其他浏览器上进行测试。


6
我建议您查看Web音频API:规范 --- 教程 在Web音频API中有目的地属性。但是它是只读属性,因此不能被设置。

目的地属性始终对应于声音的默认硬件输出,无论是通过扬声器、连接的耳机还是蓝牙耳机。

也可以参考这里:链接

2
我正在制作一个基于Web音频的声音装置,并遇到了同样的问题。我想将不同的通道输出映射到不同的扬声器,你有进展吗?
这位先生似乎已经成功做到了:http://www.brucewiggins.co.uk/?p=311 我在Apogee Quartet上测试过了,它可以输出到8个不同的通道。
我还发现了这篇文章很有用:http://www.html5audio.org/2013/03/surround-audio-comes-to-the-web.html
if (context.destination.maxChannelCount >= 4) {
  context.destination.channelCount = 4;
}
// otherwise, let's down-mix to 2.0
else {
  context.destination.channelCount = 2;
}
context.destination.channelCountMode = "explicit";
context.destination.channelInterpretation = "discrete";
context.destination.numberOfOutputs = 4; 

1
虽然你可以使用分离器和合并器节点来分配到输出的特定通道,但实际输出的设备被浏览器抽象化并且无法被你的代码访问。我已经尝试过使用8通道虚拟音频线缆并将其转发到浏览器外的其他声音设备,但不幸的是,我找不到一个可以打开带有超过2个通道的8通道声卡的浏览器。希望未来的浏览器能提供更多的选项。这种灵活性永远不会直接提供给JavaScript…也不应该。这是为你做的一个抽象,如果浏览器正确使用它,这不会成为问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接