我认为我们只能轮询 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/