3

プログラムがスピーカーからオーディオを拾う実験を行っています(デシベルで...一種)。通常、範囲は約 0 から 20 の間です。この値を 0 から 1 の範囲にマッピングして、スピーカーからの音量に比例してアイテムをスケーリングできるようにします。したがって、オーディオが 20 dB の場合、スケールは 1 になります。オーディオが 0 dB の場合、スケールは 0 になります。これを行うにはどうすればよいですか? 私は Unity3D を使用しています。それがヘルパー関数のアイデアを誰かに与える場合。

4

2 に答える 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 に答える