将MIDI通道音量映射到增益的推荐方法是什么?
从这里[1]
如果仅使用粗略值,建议设备以对数方式使用音量值,如下面的公式所示:
40 log(Volume / 127)
对我来说,这个公式看起来像一个反公式。如果以dB为单位给出通道音量,则公式应使用exp
而不是log
。如果音量已经是幅度,那么应该只有Volume/127
。澄清一下,这没有意义
*output_buffer = 40*log(channel_volume/127.0) * (*input_buffer);
(测试用例:channel_volume = 0将提供无限增益)另一方面,下面的情况更好(假设channel_volume
是实际增益而不是以dB为单位的增益):
*output_buffer = channel_volume * (*input_buffer)/127.0;
[1] http://www.blitter.com/~russtopia/MIDI/~jglatt/tech/midispec/vol.htm
答案 0 :(得分:0)
MIDI规范本身不指定音量响应。 但是,General MIDI Level 1 Developer Guidelines显示了这个公式,因为大多数实现都使用它。
通道音量的值为0到127。 该公式的结果以dB为单位测量;你必须在之后将其转换为增益值:
增益= 10 ^(dB / 20)
有关如何处理与表达式控制器的交互,请参阅同一文档。