我正在通过以编程方式填充 AudioBuffer
来创建 1 秒音频片段。 AudioBufferSourceNode
已启用循环。它在 Chrome 和 Firefox 中播放得很好。
现在我想动态更新 AudioBuffer 并立即(或在下一个循环时)拾取新音频。在 Chrome 中,只需获取 channel 数据 (getChannelData(0)
) 并写入即可完美实现此目的。 Chrome 会即时更新播放音频。 Firefox 会一遍又一遍地播放原始缓冲区。事实上,在 Firefox 中,需要先写入 AudioBuffer
,然后再将其分配给 AudioBufferSourceNode
(source.buffer = buffer
)。
最佳答案
不应该这样做。您正在尝试跨线程边界更新对象。
Chrome 有一个错误,我们目前没有实现内存保护(即您可以更新 AudioBuffer 的内容,它将改变循环缓冲区的声音)。 FF 目前有一个不同的错误,它允许您多次设置 .buffer。这些都应该得到修复。
为了解决这种情况,您需要循环每个缓冲区,直到获得下一个缓冲区,然后在它们之间进行交叉淡入淡出。无论如何,循环 1s 缓冲区不太可能是您真正想要的? (除非是噪音。)
关于javascript - Firefox Web Audio API 即时更新 AudioBuffer/AudioBufferSourceNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29842079/