似乎Pd只有全局MIDI弯音控制。如何为个别音符发送不同的弯音事件?
在Pd扩展中,我制作了一个简单的补丁,从MIDI中读取并将相同的音符写入MIDI输出。现在我想根据查找表为每个传入的音符改变音高弯曲事件单独,因此MIDI输出音符会根据音符中的MIDI进行不同的弯曲。
有什么想法吗?
答案 0 :(得分:5)
弯音是channel voice message
意味着它适用于整个频道,因此没有直接的方法来做你想要的。唯一可行的解决方案是非常间接的,它将使用多个通道,每个通道配置为播放相同的声音,然后将传入的音符分开,使得每个通道上一次只播放一个音符。这种方法的一个典型例子是吉他的MIDI拾音器 - 每个琴弦都有一个拾音器。他们将每个拾音器分配给一个谨慎的MIDI通道,然后他们可以将字符串弯曲映射到各个字符串的音高弯曲(有时很差)。
答案 1 :(得分:3)
这是MIDI协议的限制,取决于你想要做什么,你可能想要查看OSC(OpenSoundControl),HD-MIDI或简单的FUDI。
答案 2 :(得分:2)
因此您似乎意识到MIDI的限制(每个通道只有一个弯音参数),但是想要为每个音符单独形成音高弯曲值。
假设您创建了128个表(名为“bend1”..“bend128”),每个16383值为long,包含一个查找表,用于在输入pitchbend值(-8192 .. + 8192)和输出pitchbend值之间进行转换(来自-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-notenumber获得频率并将其发送到你最喜欢的[osc~]。
答案 3 :(得分:0)
使用纯数据,你可以通过使用midi CC来进行实时音高变换或者分配"注意触后"以此目的。