2

Pd 似乎只有一个全局 MIDI 弯音控制。如何为单个音符发送不同的弯音事件?

在 Pd 扩展中,我制作了一个简单的补丁,它从 MIDI 读取并将相同的音符写入 MIDI 输出。现在我想根据查找表为每个传入音符单独更改弯音事件,因此 MIDI 输出音符的弯曲取决于 MIDI 输入音符。

有任何想法吗?

4

4 回答 4

5

弯音是一种channel voice message适用于整个通道的含义,因此没有直接的方法可以做你想做的事。唯一可能的解决方案是非常间接的,它会使用多个通道,每个通道都配置为播放相同的声音,然后将传入的音符分开,这样每个通道上一次只播放一个音符。这种方法的一个典型例子是吉他的 MIDI 拾音器——每根弦都有一个拾音器。他们将每个拾音器分配给一个谨慎的 MIDI 通道,然后他们可以将琴弦弯曲映射到各个琴弦的弯音(有时效果不佳)。

于 2015-09-22T18:08:42.383 回答
3

这是 MIDI 协议的限制,取决于您想要做什么,您可能想要查看 OSC (OpenSoundControl)、HD-MIDI 或简单的 FUDI。

于 2015-09-23T04:20:00.873 回答
2

所以您似乎知道 MIDI 的局限性(每个通道只有一个弯音参数),但想为每个音符单独调整弯音值

假设您创建了 128 个表(命名为“bend1”..“bend128”),每个表有 16383 个值长,其中包含一个查找表,用于在输入弯音值(-8192..+8192)和输出弯音值(从 -1. .+1),那么您可以执行以下操作:

[notein                        1]
|                               |
[t b f]                         |
|     +---------+               |
|               |               |
|  [bendin 1]   |               |
|  |            |               |
[f ]            [t f         f] |
|               |             | |
[+ 8192]        [set array$1( | |
| ______________+             | |
|/                           /  |
[tabread]                   /   |
|                          /    |
[* 12]                    /     |
|                        /      |
[+                      ]       |
|                               |
[noteout                       1]

这将根据单独形状的弯音值修改每个 MIDI 音符。主要缺点是,[noteout] 将发送 MIDI 音符(由于 MIDI 的限制只能是整数值),因此输出将被量化为半音:-(

但是,如果您在 Pd 中进行合成,那么您可以使用分形音符值:只需将它们发送到 [mtof] 以从 MIDI 音符编号获取频率并将其发送到您最喜欢的 [osc~]。

于 2015-09-23T15:26:04.150 回答
0

使用纯数据,您可以通过使用 midi CC 来进行实时音高转换来解决此问题,或者为此指定“音符触后”。

于 2017-01-20T21:53:52.480 回答