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

时间:2014-08-03 15:46:08

标签: javascript web-audio observers

我是否认为我们被简化为轮询AudioParams以观察其值的变化?

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

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

param是一个对象,带有一堆用于控制节点增益的方法和属性。为了观察变化,我们需要观察param的'value'属性。

问题是Object.observe无声地失败:

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

这里永远不会调用回调。

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

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

所以问题是,我们是否减少了轮询以观察AudioParam对象值的变化(虽然在requestAnimationFrame上,但仍然是轮询),还是有更好的方法?

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

1 个答案:

答案 0 :(得分:2)

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