我是否正确地认为我们只能轮询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。到目前为止没有答复。
发布于 2014-08-04 17:33:24
我们不知道如何做到这一点,因为这会对业绩产生严重影响。同时,我建议您重新实现一个AudioParam包装器,它可以在主线程上为您提供值。
https://stackoverflow.com/questions/25106330
复制相似问题