缩放整数值(来自float)

For*_*_13 2 c++ floating-point int midi scale

我正在设计一个VST音频插件,它需要从输入信号中提取幅度数据,以用于midi域中的速度设置.

本质上,我将接收0-1(浮点数)之间的值,并需要将它们转换为0-127 int.

目前,该过程将浮点值乘以100得到+3小数位的整数值,即103.4567685或005.6778787282

从这里开始,我将使用floor()函数将浮点数舍入到整数.

但是,这将使我的值在0-100之间; 但是,我需要将它们缩放到0-127.

关于如何使这成为可能的任何建议将不胜感激.

Mar*_*som 5

如果你采取这里提出的一些建议并乘以127,你会发现你的输出中没有很好地表示127.也许这对你来说不是问题,但是有一个很小的变化会产生很大的不同.

您可能认为舍入会有所帮助,但事实并非如此.127处的值的数量仍然只是其他值的一半,现在0的值的数量也将是平均值的一半.

正确的公式:

int amplitude = static_cast<int>(value * (128-epsilon)); // where epsilon is a very small floating point value
Run Code Online (Sandbox Code Playgroud)


Ton*_*nyK 5

正确的方法是:

int amplitude = 128 * value ;
if (amplitude == 128) amplitude = 127 ;
Run Code Online (Sandbox Code Playgroud)