Web オーディオでは、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 ベータ版もチェックインしましたが、同じ結果が得られました。「Processing buffer」ログ エントリは表示されません。
一般的なオーディオ システムをテストするには、最後の行のコメントを外してオシレーターを宛先に直接接続すると、Chrome でオーディオ (オシレーター トーン) が正しく再生されます。しかし、ScriptProcessor を Chrome で動作させることができません。
ScriptProcessor を使用してチュートリアルなどをネットで検索しましたが、実行可能な例が含まれていないか、機能しない (または複雑すぎる) ものを見つけました。
(明確にするために、これは簡略化されたサンプルであり、実際にやろうとしていることとはまったく関係がないため、ScriptProcessor を使用してホワイト ノイズを生成するべきではないとは言わないでください。 . それは目的ではありません; 実際の使用のためには、ScriptProcessor が機能することが絶対に必要です。)
イベント名が間違っているなど、非常に愚かなことをしている可能性が最も高いと思いますが、それが見つかりません。誰でも助けることができますか?