firefox - Web Audio Api,实时更新循环缓冲区数据,在 Firefox 中不可能?
问题描述
在播放循环缓冲区时尝试更改底层缓冲区数据时遇到问题。
bufferData = audioContext.bufferSourceNode.buffer.getChannelData(0);
bufferData[100] = newValue;
这种行为似乎在大多数浏览器中都能正常工作——我已经在 Chrome、Safari、Opera、Edge 中进行了测试,一切正常——但这在 Firefox 中似乎是不可能的。这似乎是一个错误。我在2015 年的这个 StackOverflow 问题中读到,这种更新缓冲区的方式“不应该以这种方式完成……”这种事情应该如何在 Firefox 中实现?
尝试的解决方法:
tempBufferData = bufferSourceNode.buffer.getChannelData(0);
bufferSourceNode.stop();
bufferSourceNode.disconnect();
buffer = audioContext.createNewBuffer();
tempBufferData[10] = newValue;
buffer.copyToChannel(tempBufferData);
bufferSourceNode.buffer = buffer;
bufferSourceNode.connect(gainNode);
bufferSourceNode.start(audioContext.currentTime);
停止当前缓冲区,断开连接,创建新的bufferSourceNode和新的缓冲区,每次更新缓冲区重新连接节点的方法感觉很繁琐。到目前为止,在我对该方法的测试中,引入了很多故障/弹出。有没有一种改进的方法来做到这一点?
这是需要这种更新缓冲区的具体示例:一个演示,您可以在其中绘制一个循环的波形,每次更改绘图时都会更新。似乎除了在Firefox中工作。
解决方案
我认为这不是您希望的答案,因为这将是相当多的额外工作,但我认为您在 Firefox 中“应该”这样做的方式(即网络音频 API 规范的方式)对于这些类型的任务)是使用 AudioWorklet。
https://developer.mozilla.org/en-US/docs/Web/API/AudioWorklet
推荐阅读
- oracle - 通过 sql(不是跟踪文件)获取深入的哈希连接信息,例如 # of pass,hash_area_size
- php - 有没有一种简单的方法来创建自定义 PHP XML 编写器函数?
- react-native - 如果我在我的 RootPage 上,如何访问 this.props.navigation?
- css - 如何使用反应重构开关盒的代码?
- xamarin - 如何使用 xamarin 表单在(Android/ios)应用程序中打开位置地址的位智应用程序?
- node.js - 获取 Google Cloud 转移作业的状态
- python - 如何让 matplotlib 的 imshow 每秒刷新一次?
- json - 如何从 json/avro 模式文件的开头和文件末尾的最后一个括号中删除特定数据?
- python - Jinja 中的编号循环
- c# - nlog 自定义目标在 .net core 2.0 之后没有记录