我是否认为我们被简化为轮询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。到目前为止没有回复。)
答案 0 :(得分:2)
我们不确定如何做到这一点,因为这会产生严重的性能影响。与此同时,我建议您重新实现一个AudioParam包装器,它可以为您提供主线程的价值。