如何使用Web Audio Api选择目标输出设备

Rog*_*e45 5 api audio web web-audio-api

我一直在使用网络音频api,并创建了一个上下文,并使用数据填充了源缓冲区。它在默认输出设备上可以正常播放,但是我不知道如何选择目的地。在旧的w3规范中,您能够将正确的deviceId传递给音频上下文构造函数,但是我现在不知道如何在不使用media元素的情况下进行操作。有什么建议么?

source = context.createBufferSource()
source.loop = true;
source.buffer = globalAudioBuffer;
source.connect(context.destination);
context.resume();
source.start(0);
Run Code Online (Sandbox Code Playgroud)

Ash*_*her 6

不幸的是,尚未实现设置Webaudio图表的目标音频设备,并且此API尚未最终确定。

您现在可以做的就是将网络音频图连接到HTML元素,并设置该元素的下沉符号(当前仅适用于Chrome)

这是一个简单的示例:

var ac = new AudioContext();
var audio = new Audio();
var o = ac.createOscillator();
o.start();
var dest = ac.createMediaStreamDestination();
o.connect(dest);
audio.src = URL.createObjectURL(dest.stream);
audio.play();
Run Code Online (Sandbox Code Playgroud)

现在,您的振荡器将播放音频元素,并且您现在可以audio.setSinkId()使用连接的输出设备的deviceId进行调用。

  • 奇怪的是,这种方法会导致主线程负载过重(例如,短时间内启动大量振荡器),并导致音频出现故障,并且在几秒钟后出现*失谐的音频输出(!)*,从 chrome 56 all 中可以观察到通往 63 的道路(当前)。我的假设是主线程负载会干扰“MediaStream”对象或“HTMLAudioElement”。有这方面的经验吗? (2认同)