首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Chrome:更改audio element和MediaStreamAudioDestinationNode的音频源时声音错误

Chrome:更改audio element和MediaStreamAudioDestinationNode的音频源时声音错误
EN

Stack Overflow用户
提问于 2016-08-16 19:25:34
回答 1查看 431关注 0票数 3

我有一个应用程序,可以播放不同的代码生成的声音。我将这些声音放在Audio中,允许用户选择播放声音的输出设备,因此我使用MediaStreamAudioDestinationNode,其流用作AudioBufferSourceNode.元素的源。这样,当用户选择要播放声音的音频输出时,我将audio元素的Sink Id设置为请求的音频输出。

所以我有AudioBufferSourceNode ->一些音频图形(增益节点等) -> MediaStreamAudioDestinationNode ->音频元素。

当我播放第一个声音时,它听起来很好。但是,当我创建一个新的信号源并将其连接到相同的MediaStreamAudioDestinationNode时,声音以错误的音高播放。

我创建了显示该问题的a Fiddle

这是一个bug,还是我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2016-08-18 17:45:46

使用.connect() and .disconnect()可以动态更改图形布局,即使音频正在播放或通过流发送(甚至可以通过WebRTC流传输)。我找不到参考in the spec,所以我很确定这是理所当然的。

例如,如果您有两个AudioBufferSourceNodes bufferSource1bufferSource2,以及一个MediaStreamAudioDestinationNode streamDestination

代码语言:javascript
复制
bufferSource1.connect(streamDestination);

//do some other things here, and after some time, switch to bufferSource2:

//(streamDestination doesn't need to be explicitly specified here)
bufferSource1.disconnect(streamDestination); 
bufferSource2.connect(streamDestination);

Example in action

编辑1:

的正确实现:

根据Editors Draft on the Audio Output API的说法,计划/将有可能为AudioContext选择自定义音频输出设备(通过new AudioContext({ sinkId: requestedSinkId });)。我找不到任何关于进度的信息,甚至找到了一个related discussion,显然提问者已经读过了。根据这篇文章和(许多)其他参考文献,这似乎不是一件容易的事情,但是it's planned for WA V1

编辑:该部分已从API草案中删除,但您仍然可以在older version中找到它。

当前解决方法:

我使用了您的变通方法(使用MediaStreamAudioDestinationNodeAudio对象),它似乎与没有任何连接有关。我修改了我的示例以切换单个缓冲区(类似于your example,但使用了AudioBufferSourceNode),并观察到类似的频率下降。但是,当在中间使用GainNode并将它的gain.value设置为01时,频率下降就消失了(如果您想动态创建和连接新的AudioBuffer,这不是解决方案)。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38973666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档