Web Audio API - 为什么我的音频处理回调没有接收回放时间?

时间:2014-02-23 02:29:14

标签: javascript html5 google-chrome web-audio

我正在尝试通过ScriptProcessorNode界面实现自定义Web Audio API节点。我已经完成了大部分工作,但由于某种原因,传递给onaudioprocess的{​​{3}}未定义playbackTime属性。这是为什么?

var AudioContext = window.AudioContext || window.webkitAudioContext;
var context = new AudioContext();
var proc = context.createScriptProcessor(16384, 0, 2);

proc.onaudioprocess = function (event) {
    if (!event.playbackTime) {
        console.log("No playback time");
    }

    proc.disconnect(0);
};

proc.connect(context.destination);

Web Audio API会调用proc.onaudioprocess,但event.playbackTime未定义。请参阅我的event以了解问题(“无播放时间”应打印到控制台)。

到目前为止,我已经使用Linux上的Chromium 32.0.1700.107和Windows上的Chrome 33.0.1750.117进行了测试。

2 个答案:

答案 0 :(得分:3)

您可能遇到了一个webkit错误。

https://bugs.webkit.org/show_bug.cgi?id=105518

  

根据W3C WebAudio Spec AudioProcessingEvent接口应具有如下参数:

interface AudioProcessingEvent : Event {

        JavaScriptAudioNode node;
        readonly attribute float playbackTime;
        readonly attribute AudioBuffer inputBuffer;
        readonly attribute AudioBuffer outputBuffer; 

    }
  

W3C规范链接:http://www.w3.org/TR/2012/WD-webaudio-20120802/

     

最新的WebKit-137862中不存在参数“playbackTime”。如果需要,还需要在AudioProcessingEvent中实现更新playbackTime参数的必要计算。

     

Current Implementation AudioProcessingEvent.idl:

[
    Conditional=WEB_AUDIO,
    JSGenerateToJSObject
] interface AudioProcessingEvent : Event {
    readonly attribute AudioBuffer inputBuffer;
    readonly attribute AudioBuffer outputBuffer; 
};

答案 1 :(得分:2)

请注意,这是Webkit错误(即Safari版) - Blink(Chrome)错误位于https://code.google.com/p/chromium/issues/detail?id=332782

显然,我不会把它描述为“核心Chromium团队并不关心Web音频” - 只有一些问题没有排到最顶层,而且已经失去了Chris Rogers该团队去年对我们的生产力造成了打击。 :)