私は Web Audio API をいじっており、mp3 をインポートする方法を見つけようとしています (したがって、これは Chrome のみです)、キャンバス上でその波形を生成します。リアルタイムでこれを行うことができますが、私の目標はこれをリアルタイムよりも速く行うことです。
私が見つけたすべての例は、 onaudioprocess イベントにアタッチされた関数で、アナライザー オブジェクトから周波数データを読み取ることを含みます。
processor = context.createJavascriptNode(2048,1,1);
processor.onaudioprocess = processAudio;
...
function processAudio{
var freqByteData = new Uint8Array(analyser.frequencyBinCount);
analyser.getByteFrequencyData(freqByteData);
//calculate magnitude & render to canvas
}
ただし、analyser.frequencyBinCount
サウンドが再生されているときにのみ読み込まれるようです (バッファがいっぱいになっていることについての何か)。
私が望むのは、ファイルを手動/プログラムでできるだけ速くステップ実行して、キャンバス イメージを生成できるようにすることです。
私がこれまでに持っているのはこれです:
$("#files").on('change',function(e){
var FileList = e.target.files,
Reader = new FileReader();
var File = FileList[0];
Reader.onload = (function(theFile){
return function(e){
context.decodeAudioData(e.target.result,function(buffer){
source.buffer = buffer;
source.connect(analyser);
analyser.connect(jsNode);
var freqData = new Uint8Array(buffer.getChannelData(0));
console.dir(analyser);
console.dir(jsNode);
jsNode.connect(context.destination);
//source.noteOn(0);
});
};
})(File);
Reader.readAsArrayBuffer(File);
});
ただし、getChannelData() は常に空の型付き配列を返します。
たとえそれが不可能であることが判明したとしても、どんな洞察も高く評価されます。インターネットがリアルタイムで何かをしたくないのは私だけだと思います。
ありがとう。