我正在设计一个VST音频插件,该插件需要从输入信号中提取幅度数据,以用于Midi域中的速度设置。
本质上,我将接收0-1(浮点数)之间的值,并且需要将它们转换为0-127 int。
目前,此过程将浮点值乘以100,以得到+3小数位的整数,即103.4567685或005.6778787282
然后,我将从此处使用floor()函数将浮点数舍入为整数。
但是,这将使我的值介于0到100之间;但是,我需要将它们缩放到0-127。
任何有关如何使之成为可能的建议将不胜感激。
最佳答案
如果采纳此处介绍的一些建议并乘以127,您将发现输出中的127表示得不是很好。也许这对您来说不是问题,但是有一个小的改变会带来很大的不同。
您可能认为四舍五入会有所帮助,但没有帮助。 127处的值数仍将仅为其他值的一半,现在0处的值数也将为平均值的一半。
正确的公式:
int amplitude = static_cast<int>(value * (128-epsilon)); // where epsilon is a very small floating point value