2016-08-16 13 views
3

getByteFrequencyDataは、各周波数帯域のdB単位で音量を返します。 VUメーターに表示する信号のdB単位の合計ボリュームをとするにはどうすればよいですか?getByteFrequencyDataからdB単位で音量を正しく決定する方法

ほとんどの場合、各周波数帯の音量を単純に加算した後、合計をバンド数で割りますが、これは間違いです。それは、信号全体が6dBを有するためには、すべての周波数帯域が6dBである必要があることを意味する。それはもちろん、そうではありません。

私の質問:

  1. がどのように信号正しくの総量を決定することができますか?

  2. minDecibelsが-96に、maxDecibelsが0に設定されている場合、0の値は-96 dBに変換され、255の値は0 dbと解釈されます。しかし、128の値はどういう意味ですか? -48 dB?

答えて

1
  1. 私は、これはあなたが「ボリューム」によって何を意味するかに依存だと思います。それが信号のエネルギーである場合は、出力の平均をgetFloatFrequencyDataから取ることができますが、平均値はdB値を平均してはなりません。平均を行う前に線形に変換する必要があります。これは高価です。時間領域のデータをとり、平均平方和を計算して、同じ回答を得ることができます(ほとんど)。
  2. はい、FFTデータはdBに変換され、最小値と最大値の間で線形にマッピングされます。 https://webaudio.github.io/web-audio-api/#widl-AnalyserNode-getByteFrequencyData-void-Uint8Array-arrayを参照してください。
+0

ありがとうございます。 「音量」とは、プロオーディオソフトウェアでVUメーターが表示するものと同じです。私は、同様のVUを作成したい。 VUメーターには、-96〜0 dBのレベルが表示されます。どうすればいい? –

+0

Googleはあなたの友人です。私が見つけた1つの例はhttps://github.com/cwilso/volume-meterです。それはあなたを始めるはずです。 –

+1

それは読書です。 1.リンク先の例は機能しません。 2.これは廃止予定のメソッドを使用します:https://webaudio.github.io/web-audio-api/#the-scriptprocessornode-interface---deprecated 3.私の質問を読んでください:私はチャンネルデータを取得する方法を知っています。私が知らないのは、音量をdB **で正しく計算する方法です。 –

0

私はこの問題にも取り組んでいます。getByteFrequencyData出力の平均からの結果は、正しく表示されません。

単純な解決策は、のピークの値を周波数データから戻すことです。これは、生産

var array = new Uint8Array(buffer_size); 

listenerNode.onaudioprocess = function(){ 

    // Get the audio data and store it in our array. 
    volume_analyser.getByteFrequencyData(array); 

    // Get the peak frequency value. 
    var peak_frequency = Math.max.apply(null, array); 

    // ... 
} 

はVUメーターディスプレイに通常のを見ていることの結果。

+0

私はそれがトリックをするかどうかは分かりませんが、これは最高の音量を持つ周波数帯の音量を与えるだけなので、しかし、「合計」音量は、すべての周波数帯域の音量の混合です。 –

+0

私は少しハッキリを感じる、私は同意する。しかし、この方法をしばらく使用していたのは、私が慣れていたアナログVUメーターのように振る舞います。平均した場合、すべての周波数が0dBFSであれば最大音量しか得られません。実際の世界では、1つの周波数帯がクリッピングされている場合、そのことについて知りたい! –

関連する問題