9

iPhone SDKのAVAudioRecorderを使用して、チャネルのピーク電力と平均電力をデシベル単位で取得できます。範囲は0dbから160dbの間です。これを0から10の間のスケール、またはオーディオレベルメーターに使用できる同様のものに変換するために使用される計算は何ですか?

4

2 に答える 2

19

範囲は -160 dB から 0 dB です。おそらく、-90 dB から 0 dB までのメーターで表示したいと思うでしょう。デシベルは対数スケールであるため、デシベルとして表示する方が実際には線形のオーディオ レベルよりも便利です。

つまり、これを使用してデシベルから線形に変換できます。

linear = pow (10, decibels / 20);

そしてその逆:

decibels = log10 (linear) * 20;

上記のデシベルの範囲は、負の無限大からゼロまでで、線形の場合は 0.0 から 1.0 です。線形値が 0.0 の場合、それは -inf dB です。1.0 での線形は 0 dB です。

于 2010-03-21T16:10:20.813 に答える
5

Apple はまた、dB から線形振幅への変換クラス MeterTable.cpp および MeterTable.h を実装しました。SpeakHere アプリの例を参照してください。

「オンザフライ」で値を計算するインライン関数を使用できます

inline double DbToAmp(double inDb);

また

事前に計算されたルックアップ テーブルを使用するための MeterTable インスタンスを作成します。これにより、変換値がメモリに保存されるため、アプリケーションで計算の回数を減らすことができます。

float ValueAt(float inDecibels);

注: 同時に多くの計算を行っている場合、または非常に高速な処理が必要な場合は、ルックアップ テーブルが必要になる可能性があります。

于 2010-06-19T01:17:06.053 に答える