c++ - 将分贝范围转换为字节范围

标签 c++ audio algebra fmod

问候,

我试图找到一个公式来转换一个范围,其中:

最小 = -100db 和最大 = -30db

到:

最小 = 0 和最大 = 255

例如:-60db = ?

看起来很简单,但它让我头晕目眩。

最佳答案

假设您的意思是结果以 db 为单位,您要求的是简单的线性插值:

f(x) = ymin + (x - xmin)*(ymax - ymin)/(xmax - xmin)

或者在你的情况下,

f(x) = 0 + (x + 100)*(255 - 0)/(-30 + 100) 
f(-60 db) = 145.714 

相反,如果您是在谈论将 db 转换为用于与音频信号相乘的比例因子,那么它会稍微复杂一些。例如,将音频信号乘以 0 就是负无穷大 db。所以(至少)你必须对这种情况进行特殊处理。

关于c++ - 将分贝范围转换为字节范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41927399/

相关文章:

c++ - 为什么 C 风格的转换行为与 dynamic_cast 不同?

iphone - 如何轻松地将分贝读数的值传递到动态针图形

android - MediaPlayer类的stop方法

javascript - 计算纸牌屋中的纸牌数量

C# 四舍五入除法

c++ - 有人可以为我得到的输出清除这个概念吗?

c++ - Boost.program_options : implicit_value and Unicode results in compile-time error

c++ - 符号无法解析 C++

audio - OpenAL 设备、缓冲区和上下文关系

java - 在 Java 中计算数学函数的值