HTML5音频输出修补

时间:2014-04-10 00:24:07

标签: javascript html5 audio html5-audio

我想知道是否有办法在HTML5 / JavaScript中控制音频输出设备补丁?例如,如果用户希望我的网络应用程序中有一个声音可以用于一个音频设备,而另一个声音来自不同的音频设备。我知道用户可以在他们的计算机上设置默认输出设备,但对于我正在处理的网络应用程序,我希望他们能够在播放其他声音时将单个声音发送到各个输出,类似于下面的界面(来自一个名为QLab的程序)。

我觉得明显的答案是否定的,我不想诉诸于使用flash或java。我可以写一些与javascript接口的浏览器插件。

QLab screenshot

6 个答案:

答案 0 :(得分:6)

因此,在收到基本上零有用的答案后 - 并且在网上找不到更多有用的信息,我想我想出了一些我们作为开发人员需要从浏览器供应商和w3c开始请求的东西。我们需要能够以类似的方式请求用户进行硬件访问,以便我们可以请求访问用户的位置,或者我们如何请求发送用户推送通知。

在允许Web开发人员通过硬件进行与本机应用程序开发人员相同的控制之前,我们将比我们为用户提供的内容处于极大的劣势。我不想让我的用户安装第三方/第四方插件来启用对I / O的更多控制/访问。用户不应该被淹没在保留更多软件而不仅仅是他们的网络浏览器更新,以使网站运行良好和安全。而且,我认为不应该用HTML,JavaScript,CSS和PHP等多种语言编写,以获得用户从本机应用程序获得的相同体验。

我不知道我们如何对待浏览器供应商,但我觉得开始这样做会很好。

答案 1 :(得分:5)

我建议你看一下Web Audio API: Specs --- Tutorial

Web音频API中有目标属性。然而,这是一个只读属性...所以不可设置。

Here:

  

目标属性始终与声音的默认硬件输出相关,无论是通过扬声器,连接耳机还是蓝牙耳机。

答案 2 :(得分:5)

我知道这有点旧,但今年只增加了一个名为“setSinkId”的方法,您可以将其应用于媒体元素(视频,音频)以设置将输出音频的设备。

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

https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/setSinkId

虽然目前看起来只有Chrome支持它。我还没有在Firefox或其他网络浏览器上测试过。

答案 3 :(得分:2)

我正在开发基于网络音频的声音安装并遇到了同样的问题。我想将不同的通道输出映射到不同的扬声器。你有这方面的进展吗?

这位先生似乎设法做到了:http://www.brucewiggins.co.uk/?p=311 我在一个远地点四重奏上对它进行了测试,它有效 - 输出到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; 

答案 4 :(得分:1)

虽然您当然可以使用拆分器和合并器节点分配给输出上的特定通道,但您输出的实际设备会被浏览器抽象出来并且您的代码无法访问。

我已经使用8声道虚拟音频电缆进行了一些实验,并将这些数据传输到浏览器之外的其他声音设备。不幸的是,我找不到一个能够实际打开超过2个频道的8声道声卡的浏览器。

希望未来的浏览器能提供更多选择。这种灵活性永远不会直接来自JavaScript ......也不应该。这是为您完成的抽象,如果浏览器正确使用它,它就不会成为问题。

答案 5 :(得分:1)

这是可能的。

音频输出设备API草案文档http://w3c.github.io/mediacapture-output/#webaudio-extensions中的Web音频API表达式,它将满足您的目的。

现在Chromium正在制作这个功能,那么也许你可以在不久的将来尝试。