現在、FilerReader、AudioContext経由で特定のファイルの音波を構築するために、Chrome(60.0.3112.90)のWeb Audio APIを使用しています。 、createScriptProcessor、およびcreateAnalyserです。私はanalyser.getFloatFrequencyData(data)
にすべての方法を取得し、ファイルをロードする際にWeb Audio API getFloatFrequencyData関数Float32Array引数のデータを-Infinity値の配列に設定する
const visualize = analyser => {
analyser.fftSize = 256;
let bufferLength = analyser.frequencyBinCount;
let dataArray = new Float32Array(bufferLength);
analyser.getFloatFrequencyData(dataArray);
}
loadAudio(file){
// creating FileReader to convert audio file to an ArrayBuffer
const fileReader = new FileReader();
navigator.getUserMedia = (navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia ||
navigator.msGetUserMedia);
fileReader.addEventListener('loadend',() => {
const fileArrayBuffer = fileReader.result;
let audioCtx = new (window.AudioContext || window.webkitAudioContext)();
let processor = audioCtx.createScriptProcessor(4096, 1, 1);
let analyser = audioCtx.createAnalyser();
analyser.connect(processor);
let data = new Float32Array(analyser.frequencyBinCount);
let soundBuffer;
let soundSource = audioCtx.createBufferSource();
// loading audio track into buffer
audioCtx.decodeAudioData(
fileArrayBuffer,
buffer => {
soundBuffer = buffer;
soundSource.buffer = soundBuffer;
soundSource.connect(analyser);
soundSource.connect(audioCtx.destination);
processor.onaudioprocess =() => {
// data becomes array of -Infinity values after call below
analyser.getFloatFrequencyData(data);
};
visuaulize(analyser);
},
error => 'error with decoding audio data: ' + error.err
);
});
fileReader.readAsArrayBuffer(file);
}
:私は、次のコードを持っています。ウェブオーディオAPIのドキュメントを読めば、それはパラメータであることを言う:
私の場合はThe Float32Array that the frequency domain data will be copied to.
For any sample which is silent, the value is -Infinity.
、私はこれをテストしてanalyser.getFloatFrequency(data)
を呼び出した後に使用していmp3とwavファイルの両方を持って、両方のファイルが終わります私にdata
を与え、 `-Infinity '値の配列になります。
これは私のWeb AudioのAPIについて私が気付いていないことが原因である可能性がありますが、私の疑問は、大きな音を含む両方のファイルが私にサイレントサンプルを表す配列を与えている理由です。
Chromeを使用していますか? –
あなたは何をしようとしているのかを完全にはっきりさせることはできませんが、iHateMyselfForThis.recordAudio(audioCtx、analyzer)の中になければ、audiobuffersourceでstart()を実際に呼び出すことはありませんか? – cwilso
@RaymondToyはい、その情報で質問を更新しました – antihero989