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

如何使用Web音频Api选择目标输出设备,api,audio,web,web-audio-api,Api,Audio,Web,Web Audio Api,我一直在使用web音频api,创建了一个上下文,并用数据填充了一个源缓冲区。它在默认输出设备上运行良好,但我不知道如何选择目标。在旧的w3规范中,您可以将正确的设备ID传递给音频上下文构造函数,但我现在不知道如何在不使用媒体元素的情况下执行此操作。有什么建议吗 source = context.createBufferSource() source.loop = true; source.buffer = globalAudioBuffer; source.connect(context.des

我一直在使用web音频api,创建了一个上下文,并用数据填充了一个源缓冲区。它在默认输出设备上运行良好,但我不知道如何选择目标。在旧的w3规范中,您可以将正确的设备ID传递给音频上下文构造函数,但我现在不知道如何在不使用媒体元素的情况下执行此操作。有什么建议吗

source = context.createBufferSource()
source.loop = true;
source.buffer = globalAudioBuffer;
source.connect(context.destination);
context.resume();
source.start(0);

不幸的是,设置webaudio图形的目标音频设备还没有实现,其api还没有最终确定

现在您可以做的是将webaudio图形连接到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();
现在,您的振荡器将通过音频元素播放
您现在可以使用连接的输出设备的设备ID调用
audio.setSinkId()

谢谢。当我回到那个项目时,我可能会尝试你的解决方法,或者我可能只是等待音频输出设备api成熟。祝你好运。如果您想知道此功能的状态,可以按照。请重试并获得。mediaDevices.getUserMedia将为您提供设备ID和标签,允许您设置定义的mediaStreamDestination。然后您只需source.connect(dest)。我甚至不明白为什么我们现在需要一个专用的音频输出api?奇怪的是,这种方法导致我们在主线程负载很重(例如,许多振荡器在短时间内启动)的情况下出现音频故障,并且在几秒钟后出现失谐音频输出(!),从chrome 56一直到63(当前)。我的假设是,主线程负载会干扰
MediaStream
对象或
HTMLAudioElement
。有这方面的经验吗?@JohnWeisz你会遇到这些问题吗?和