javascript - Firefox Web Audio API 即时更新 AudioBuffer/AudioBufferSourceNode

标签 javascript firefox web-audio-api

我正在通过以编程方式填充 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/

相关文章:

javascript - 如何使用 css 降低 <span> 内容区域的高度?

html - 并非所有 webm 文件都在 firefox 中播放

javascript - Web Audio Api,设置增益

javascript - 将 PCM 流转换为 Javascript 可读流

javascript - 加载模块时出现 AudioWorklet DOMException 错误

javascript - 如何将无组织数组按id转换为分组数组

javascript - 查找数组中每个元素的第一个字母

javascript - 如何从 Firebase timeStamp 获取当前数据

javascript - 获取 iframe 表面中发生的 JavaScript 异常

javascript - 如何从 Firefox 侧边栏调用 javascript 链接?