4 回答
给各位提供一个全新的看待MIDI协议的角度:
MIDI你可以看成是一大堆控制音源发音的指令,包括发什么音高(Note On/Off事件)、音高要不要平滑变化(Pitch Bend事件、Portamento CC等),或者是其他的手段,都是为了控制音源发声的。
这里面有很多是经常用的(比如Note On/Off、Pitch Bend等),所以就把这些功能直接用事件来控制。有些不太常用,比如颤音、延音等,就把这些功能用控制器编号+数值来控制。有些更不太常用,就把这些功能变成隐藏得更加深入的,比如控制器里有RPN控制器、NRPN控制器,把一些更不常用的,比如楼主在这个帖子里需要的Pitch Bend Sensitivity,一般称为弯音范围,放到了RPN控制器里。有些更更不常用的,或者说厂商自己扩展的功能,就放到了SysEx系统码里。
经常用的,比如Note On/Off,就直接用一个MIDI事件就能控制。不太常用的比如颤音,就要用MIDI CC号+具体数值来控制。更不常用的比如RPN和NRPN,就要用到MIDI CC里的RPN、NRPN、Data Entry MSB三个CC来完成。就用这个调整弯音范围这件事来说,首先发MIDI CC 101# RPN MSB=0,再发MIDI CC 100# RPN LSB=0这两条,选定RPN功能0-Pitch Bend Sensitivity;然后再发MIDI CC 6#Data Entry MSB=nn,就可以给Pitch Bend Sensitivity设定具体值。设定完后,别忘了再发MIDI CC 101# RPN MSB=127,MIDI CC 100# RPN LSB=127两条,把RPN功能指定到Null上,防止RPN其他功能被误碰。
再说上面第三条里的nn代表了什么。这个是Pitch Bend Sensitivity具体的弯音范围。这个默认是2,代表了两个半音,也就是弯音轮默认向上向下打满,各能弯一个全音。这个值可以设置为0~12,0就是不弯音,12就是最高能弯12个半音,也就是一个八度。
以上是从MIDI协议底层来解释这个事情。详细参考原来我写过的这个讨论帖:
https://www.cndzq.com/bbs/forum.php?mod=viewthread&tid=364473
但不同的编曲软件里,对MIDI底层协议有不同的呈现形式。这个帖子里用的Cakewalk不需要上述这么复杂的一系列动作,只要插入一个0号RPN事件,并且给值就行。但Cakewalk不是给12,而是(0~12)×256=0~3072之间。这个对应关系大概是这样:
默认弯两个半音时,Cakewalk里写的值为512;
弯12个半音时,Cakewalk里写的值为3072;
为啥是这样?因为RPN0 Pitch Bend Sensitivity实际上是由两个字节控制的,而MIDI CC 6# Data Entry MSB只给高字节赋值0~12,默认的2也是MSB=2,而LSB默认都是0。所以MSB、LSB两个字节拼合起来就是十六进制的0x200~0xC00,换算成十进制就是512~3072。
达到弯音轮的最大弯音程度,需要让弯音轮这个事件的数值达到+8192或-8192
直接调这里,pitch bend sensitivity(弯音轮敏感度),弯音轮上下12个刻度。如果这里pitch bend sensitivity设置为1536,则1536/128=12个半音为一个8度,如果要是8个半音,那么弯音轮敏感度需要设置为128*8=1024。弯音轮敏感度只需要设置一次,全局有效
midi文件中事件130 pitch bend 从-8192到8191跨度只有4个半音
但是事件151有个pinch bend sensitivity 默认数值是12(最高48)
由于本人没用过所以不知道是否按想象中一样能够增加范围
您的回答
登录以回答这儿是 MidiShow 问答区,欢迎您请教或帮大家解决关于音乐创作、MIDI 应用、MIDI 技术等音乐相关的问题。
问答区积分规则如下:
- 提问、回答或自问自答积分均不变
- 问题被赞成 : +10
- 问题被反对 : 提问者 -2,点击反对者不扣分
- 回答被赞成 : +10
- 回答被反对 : 回答者 -2,点击反对者 -1
- 提问者选出满意回答 :回答者 +15 ,提问者 +2
参与问答前请阅读:问答区玩法规则