4

オーディオ ファイルの周波数分析を実行しようとしていますが、再生せずに実行したいと考えています。があったことがわかりましたofflineAudioContext。これはおそらくここで必要なものです。

この jsfiddleの完全なコード

Web Audio API は私にとって少し未踏の領域であり、何をしているのか完全にはわかりません。チュートリアルの多くはリアルタイム オーディオに焦点を当てており、まさにそれを防止したいと考えています。

内部context.oncompleteでは、正確に見えるレンダリングされたオーディオ バッファ データを取得することができました。fft からデータを取得するとき、非常に小さなデータ セットを取得しているように見えますが、これは最後のサンプルからのデータに過ぎないと推測しています。読み込んでいるオーディオ ファイルの x ミリ秒ごとにこのデータが必要です。この形式のデータを取得する方法についていくつかのアイデアを知りたいですか?

基本的に私が期待しているのは次のようなものです:

[
  // array with frequency data for every (nth) frequency band for 1st sample,
  // array with frequency data for every (nth) frequency band for 2nd sample,
  // array with frequency data for every (nth) frequency band for 3rd sample,
  …
]
4

2 に答える 2

1

に fftSize を設定すると、ビンの数がAnalyserNode得られます。(fftSize / 2)そのため、予想よりもはるかに少ないデータが表示されています。

基本的に何が起こっているかとgetByteFrequencyDataいうと、レンダリングされたバッファーの最初の 128 サンプルだけを見ており、残りは単純に無視されています。

代わりに、ScriptProcessorNodea にbufferSize等しい a を使用してみてくださいfftSize。次に、ScriptProcessorNodeonaudioprocessイベント ハンドラーで、バッファーを取得してその FFT を取得できます。このようなもの:

var processor = context.createScriptProcessor(fftSize, 1, 1);
source.connect(processor);

processor.onaudioprocess = function( e ) {
  var input = e.inputBuffer.getChannelData(0),
      data = new Uint8Array(fftSamples);
  fft.getByteFrequencyData(data);
  // do whatever you want with `data`
}
于 2013-09-10T14:07:56.923 に答える