javascript - 使用 WebAudio API,轮询是观察 AudioParam 值变化的唯一方法吗?

标签 javascript web-audio-api observers

我认为我们只能轮询 AudioParams 以观察其值的变化,这样的想法正确吗?

AudioParam 作为 AudioNode 的属性创建,例如:

var gainNode = audioContext.createGain();
var param = gainNode.gain;

参数是一个对象,具有一系列用于控制节点增益的方法和属性。为了观察变化,我们需要观察参数的“value”属性。

问题是 Object.observe 默默失败:

Object.observe(param, function(changes){
    console.log(changes);
});

这里永远不会调用回调。

您还可以将“value”属性重新配置为 getter/setter,并在设置值时调用观察代码 - 但这也会失败。该属性是可配置的,您可以在其上设置值,但是音频节点似乎没有使用getter来获取值,因此它没有使用我们设置的值。我认为由于这个原因它应该是不可配置的。

我可以理解为什么这些方法是不可取的 - AudioParam 值可以以采样率更新,因此这些观察器可能每秒被调用数千次。

所以问题是,我们是否简化为轮询来观察 AudioParam 对象值的变化(尽管是在 requestAnimationFrame 上,但仍然是轮询),还是有更好的方法?

(几天前我在公共(public)音频邮件列表上问过这个问题:http://lists.w3.org/Archives/Public/public-audio/2014JulSep/0054.html。到目前为止还没有回复。)

最佳答案

我们不确定如何做到这一点,因为这会严重影响性能。同时,我建议您重新实现一个 AudioParam 包装器,它可以在主线程上为您提供值(value)。

关于javascript - 使用 WebAudio API,轮询是观察 AudioParam 值变化的唯一方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25106330/

相关文章:

javascript - 如何使用 createPeriodicWave 代替 createScriptProcessor 和 getChannelData

javascript - 使用 Web Audio API 进行跨应用程序音频分析

javascript - 从服务器加载数据时,Angular 服务监听

javascript - polymer :用复杂的观察器观察阵列突变

ruby-on-rails - 观察 Rails 和 Mongoid 中的字段

javascript - javascript中冒号的使用

javascript - 如何使用 jQuery 访问在 Javascript 中作为函数参数的对象的变量名?

javascript - 调试慢速 jQuery 代码

javascript - CSS : One of the DIVs gets positioned higher when window is resized

html - 在 Web Audio API 中使用 playbackRate.value 时如何获取当前时间