如何理解midi音符开关前后,音符强度的变化

提问于
最后更新于
浏览 387次
登录并提问
1

比如下面的例子:

|90 49 64 30 |80 49 40 00|

64是音符开始时的强度,结束时他的强度变为了40,中间间隔了0X30个tick(是微秒还是tick数我也不太清楚,请大佬解惑),音符强度是随时间均匀递减的吗?如果是这样,计算机又是怎么处理的呢?

Happy_478643
XP 34
Happy_478643
提问于 2023/9/5 下午12:14:55
4

感觉你的这一串数据,分段分错了。第一个90前的位置要有一个或者若干个DeltaT时间,然后才是MIDI事件90 49 64,再然后的30是下一个事件的DeltaT,再然后才是80 49 40,后面再跟着DeltaT,再跟着事件,这样顺序排下去的。所以MIDI文件里排布的应该是“DeltaT+事件”的这种形式。

Note Off里力度和Note On不一致这个事,不是音符强度随时间均匀递减,而是Note Off中的力度信息会被忽略,也就是说80 49 40里的40是没用的。为啥当时要这么定义,我也不知道。MIDI规范里有不少这种奇怪的规定,毕竟写MIDI Spec的这拨人都是跨界专家。

像这种80 aa bb的Note Off事件,很多时候是直接用90 aa 00来代替的。音源收到力度为0的Note On事件时,也是按Note Off处理的。为啥要这样呢?MIDI文件里是允许“省略状态字”的。如果下一个事件的状态字和上一个事件的状态字相同,那么下一个事件的状态字可以省略,这样可以省略一个字节的数据。但音序器在向音源发送事件时,一定要把这个省略了的状态字补上。所以你的 90 49 64 30 80 49 40这段,在MIDI文件里通常会这么写:… xx 90 49 64 30 () 49 00 …。中间括号里本应该是90的,后面跟着音符和0值的力度,然后90就被省略掉了,只保留了音符和0值力度。

参考资料:陈学煌、刘永志、潘晓利、马俊编著《MIDI原理与开发应用》,国防工业出版社出版,2008年1月第一版,第29页。

华北kingsky
XP 1035
华北kingsky
回答于 2023/9/15 下午8:05
0

嗯音符强度触发不同的采样,有个更简单的方式就叫周边层。有些甚至专业的会做一些更平滑的过度,让耳朵听起更舒服。

ChirSnier
XP 982
ChirSnier
回答于 2023/11/11 上午8:27

您的回答

登录以回答

这儿是 MidiShow 问答区,欢迎您请教或帮大家解决关于音乐创作、MIDI 应用、MIDI 技术等音乐相关的问题。

问答区积分规则如下:


  1. 提问、回答或自问自答积分均不变
  2. 问题被赞成 : +10
  3. 问题被反对 : 提问者 -2,点击反对者不扣分
  4. 回答被赞成 : +10
  5. 回答被反对 : 回答者 -2,点击反对者 -1
  6. 提问者选出满意回答 :回答者 +15 ,提问者 +2

参与问答前请阅读:问答区玩法规则