【问题标题】:Adjust MIDI Note Volume调整 MIDI 音符音量
【发布时间】:2010-11-02 06:41:43
【问题描述】:

[我正在用 Java 做这项工作,但我认为这个问题与语言无关。]

我有一个 MIDI Note On 音量(称为“data2”,它是 0-127),我正在使用推子(0 到 127)进行调整。我使用的“数学”很简单:

newData2 = oldData2 * faderVolume / 127;

0 的效果很好,127 也可以,但是接近范围底部的音量太大了,尤其是较大的音符。与线性关系可能有什么不同的关系(在伪代码中会很棒)?我必须将它们插入代码并尝试它们,当然。

我意识到这个问题取决于演奏 Note Ons 的乐器(Ableton Live 中的 BFD 套件,它不会提供太多信息),但也许不是,也许有一种标准方法来调整 Midi Note On 音量带有推子。

【问题讨论】:

  • 使用浮点数据和整数数据是有区别的(对于计算,它有很大的不同)。 newData2 是整数吗?
  • @精英绅士,是的,这是问题的一部分,我现在看到了。它是一个整数。不过,这可以解释我遇到的问题吗?
  • 是的,因为您错过了十进制值(这会影响您的结果)。
  • 谢谢@The Elite Gentleman,我会试试看,然后把你ping回来。把所有东西都转换成浮点数,做数学,然后做Math.round是合理的,对吧?跨度>
  • 查看我的解决方案,Math.round 可能不是一个好主意,因为您需要 midi 控制器可以理解的所有小数点。

标签: language-agnostic midi


【解决方案1】:

你的等式是正确的。您正在以线性方式计算相对于推子的音符打开速度。几个注意事项...

您正在调整的参数是速度。这并不一定意味着音量!这两者对于大多数合成器(包括您在 Ableton 中的架子鼓)确实具有相关性,但它可能不像您想象的那样与音量相关。

0-velocity 相当于note-off,永远不会播放声音。我这样说是因为如果 0 和 1 之间的差异很大,那么音量可能不像你想象的那样受速度参数的影响。

最后,传统的混音器推子使用对数定律。您可能会对此进行试验,但我再次认为您是在用音量吠叫错误的树。

有一条关于通道音量的 MIDI 消息,您应该将其用于音量,即 CC 7。

【讨论】:

  • 谢谢你,@Brad +1。关于吠叫和树木:不幸的是,我无法触摸通道音量,因为我的“推子”控制通过同一通道播放的音符组的 MIDI 音量。无论如何,现在我已经消除了早期铸造引起的舍入问题,这一切都变得更好了。不过,我也可以尝试对数关系......
【解决方案2】:

正如我在评论中所说,在播放声音或音频或任何可听技术时,请使用双精度或浮点数(取决于硬件或 API 规范)。

您在newData2 上返回一个整数。而是将其转换为双精度或浮点数(为了精确)。

例如

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

希望这会有所帮助。

【讨论】:

  • 谢谢,这似乎有帮助,但我必须凭经验尝试一下。只是尝试一些数字,差异永远不会大于 1,尽管在大约 15% 的所有组合中它超过了最终音符音量的 10%。如果这不起作用,我需要一些更曲线美的东西。
猜你喜欢
  • 1970-01-01
  • 2015-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多