Firefox Web Audio API即时更新AudioBuffer / AudioBufferSourceNode

时间:2015-04-24 08:12:37

标签: javascript firefox web-audio

我通过以编程方式填写AudioBuffer来创建1s音频片段。 AudioBufferSourceNode已启用循环。它在Chrome和Firefox中播放得很好。

现在我想动态更新AudioBuffer并立即(或在下一个循环中)拾取新音频。在Chrome中,通过简单地获取频道数据(getChannelData(0))并写入它就可以完美地工作。 Chrome会即时更新播放音频。 Firefox一遍又一遍地播放原始缓冲区。实际上在Firefox中,AudioBuffer需要在将其分配给AudioBufferSourceNodesource.buffer = buffer)之前编写。

2 个答案:

答案 0 :(得分:3)

这不应该这样做。您正在尝试跨线程边界更新对象。

Chrome有一个错误,我们目前没有实现内存保护(即您可以更新AudioBuffer的内容,它将改变循环缓冲区的声音)。 FF目前有一个不同的bug,它允许你不止一次设置.buffer。这些都应该得到解决。

要解决这种情况,你需要循环每个缓冲区,直到你得到下一个缓冲区,然后在它们之间交叉淡入淡出。不太可能只是循环1s缓冲区真的是你想要的吗? (除非它是噪音。)

答案 1 :(得分:0)

只需再次分配相同的缓冲区即可更新Firefox的内部状态。所以在更新缓冲区后再次执行source.buffer = buffer。即使它应该是NOOP,因为它是完全相同的参考。

即使source.buffer = source.buffer也可以。