3

我有一个实验,我的程序从我的扬声器中拾取音频(以分贝为单位......有点)。范围通常在 0 到 20 之间。我想取该值并将其映射到 0 到 1 之间的范围,以便我可以根据扬声器的音量按比例缩放项目。因此,如果音频为 20 分贝,则刻度为 1。如果音频为 0 分贝,则刻度为 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 回答