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