プログラムがスピーカーからオーディオを拾う実験を行っています(デシベルで...一種)。通常、範囲は約 0 から 20 の間です。この値を 0 から 1 の範囲にマッピングして、スピーカーからの音量に比例してアイテムをスケーリングできるようにします。したがって、オーディオが 20 dB の場合、スケールは 1 になります。オーディオが 0 dB の場合、スケールは 0 になります。これを行うにはどうすればよいですか? 私は Unity3D を使用しています。それがヘルパー関数のアイデアを誰かに与える場合。
質問する
5959 次
2 に答える
1
それが本当に最大である場合は、20で割ります。
var scale = function(db) {
return db/20;
}
また
var scale = function(db) {
if (db > 0)
{
return db/20;
}
else if (db < 0)
{
return "db is out of range"; # or do something
}
else
{
return "something else";
}
}
于 2012-06-27T19:22:36.423 に答える
0
除算によって分布を一様に押しつぶしたくない場合は、適切な対数または指数を使用できます。対数を使用するには、最小値が 1 になるようにデータをシフトしてから、対数 (任意の底) を取り、除算を使用してそれを縮小します。これにより、下限の値に重みが増し、値が大きくなるとリターンが減少します。
デシベルはすでに対数スケールであるため、指数を使用する方が適切な場合があります。各値に一定の値を上げ、最大の結果で割るだけです。これは、対数スケーリングの逆を行います。大きな数字は互いのギャップを広げ、小さな数字は互いに接近します。
于 2012-06-28T17:11:15.757 に答える