我正在尝试通过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进行了测试。
答案 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该团队去年对我们的生产力造成了打击。 :)