2010-10-06 121 views
0

[我做在Java中这项工作,但我认为这个问题是语言无关。]调整MIDI音符音量

我有一个MIDI音符开量(称为“数据2”,它的0-127)说我正在用推子调整(0到127)。在“数学”我使用的是简单的:

newData2 = oldData2 * faderVolume/127; 

零完美的作品,和127确实太少,但接近区间底部的体积实在是太响,尤其是较大的音符。什么可能是一个不同于线性关系的关系(在伪代码中会很棒)?当然,我将不得不将它们插入代码并尝试它们。

我意识到这个问题取决于正在播放Note Ons的乐器(Ableton Live中的BFD套件,它没有多少通知),但也许没有,也许还有一种标准的方法来调整Midi Note On音量与推子。

+1

有使用浮动数据和整数数据(计算它使很大的差异)的差。 'newData2'是一个整数吗? – 2010-10-06 15:58:02

+0

@精英绅士,是的,这是我现在看到的问题的一部分。这是一个整数。但是,这能解释我遇到的问题吗? – 2010-10-06 16:00:49

+1

是的,因为你错过了十进制值(这可能会影响你的结果)。 – 2010-10-06 16:19:40

回答

1

正如我对我的评论所说的,在播放声音或音频或任何可听技术时,宁愿使用双打或浮动(取决于硬件或API规范)。

您正在返回一个整数newData2。而是将其转换为double或float(用于精度)。

例如

float newData2 = (float)oldData2 * (float)faderVolume/(float)127; 

希望这会有所帮助。

+0

谢谢,这似乎有所帮助,但我将不得不凭经验尝试。只是尝试一些数字,差异不会大于1,尽管它占所有组合的约15%的最终音量的10%以上。如果这不起作用,我会需要更cur娜的东西。 – 2010-10-06 16:44:22

3

您的等式是正确的。您正在以线性方式计算相对于推子的音符开启速度。一对夫妇笔记...

您正在调整的参数是速度。这并不一定意味着音量!这两者确实对大多数合成器(包括Ableton的鼓组套件)有关联,但它可能与您想象的音量无关。

0速度相当于音符关闭,永远不会播放声音。我这样说是因为如果0和1之间的差别很重要,那么可能是因为您认为速度参数不会影响音量。

最后,传统的混音推子使用对数律。你可以试试这个,但是我认为你会用音量吠叫错误的树。

没有为你应该为体积使用信道体积MIDI消息,那就是CC 7.

+0

非常感谢,@Brad +1。关于吠叫和树木:不幸的是我无法触摸通道音量,因为我的“推子”控制着通过同一通道播放的音符组的MIDI音量。无论如何,现在这一切都变得更好了,因为我已经消除了早期铸造造成的舍入问题。尽管我可能会尝试一种逻辑关系 – 2010-11-04 17:49:58