在网络音频中,我无法让 ScriptProcessor 节点在 Chrome 中运行,尽管它在 Firefox 中运行良好。
// Create audio context (Chrome/Firefox)
var context;
if (window.AudioContext) {
context = new AudioContext();
} else {
context = new webkitAudioContext();
}
// Create oscillator and start it
oscillator = context.createOscillator();
oscillator.start(0);
// Set up a script node that sets output to white noise
var myscriptnode = context.createScriptProcessor(4096, 1, 1);
myscriptnode.onaudioprocess = function(event) {
console.log('Processing buffer');
var output = event.outputBuffer.getChannelData(0);
for (i = 0; i < output.length; i++) {
output[i] = Math.random() / 10;
}
};
// Connect oscillator to script node and script node to destination
// (should output white noise)
oscillator.connect(myscriptnode);
myscriptnode.connect(context.destination);
// NOTE: This commented-out code connects oscillator directly to
// destination, which works in Chrome as well as Firefox.
//oscillator.connect(context.destination);
该样本的预期结果是它应该以 1/10 的音量播放白噪声(实际上忽略了振荡器)。
您可以在http://jsfiddle.net/78yKV/3/尝试此代码- 请注意,在 Firefox 上,此 URL 将立即播放白噪声!在 Chrome 30 上,它不会给出任何错误,也不会给出任何音频输出。我还检查了 Chrome 31 测试版,但看到了相同的结果。“处理缓冲区”日志条目永远不会出现。
要测试一般音频系统,如果您取消注释最后一行并将振荡器直接连接到目标,它会在 Chrome 上正确播放音频(振荡器音调)。但我无法让 ScriptProcessor 在 Chrome 上工作。
我使用 ScriptProcessor 在网上搜索教程等,但我发现那些要么没有可运行的示例,要么不起作用(或者太复杂)。
(为了清楚起见 - 这是一个精简的示例,与我实际尝试做的事情没有任何关系,所以请不要告诉我我不应该使用 ScriptProcessor 来生成白噪声. 这不是它的用途;我确实需要 ScriptProcessor 来满足我的实际用途。)
我想我很可能在做一些非常愚蠢的事情,比如我有错误的事件名称或类似的东西,但我找不到它。任何人都可以帮忙吗?