MIDI的核心是将音乐表示为离散的音符事件,每个音符具有静态音高。这非常适合代表键盘乐器上演奏的音乐。您可以使用以下方式将与回音阶上的音符相对应的任何频率转换为MIDI音符编号:
69 + 12 × 对数2F[R É qü Ë Ñ Ç ÿ440
在MIDI接收器校准为A4 = 440 Hz的假设下。
对于钢琴音乐来说,这种表示方式还不错,但是问题是如何表示未映射到调律音阶的音高(非西方音乐,非音乐声音),以及如何表示音符持续时间内的音高变化(glissando,颤音)。
在MIDI中,这是通过使用“音高弯曲消息”来完成的,该消息指示合成器将当前演奏音符的音高偏移一小段时间。默认情况下,大多数合成器会在弯音消息范围(0 .. 16383)的范围内校准+/- 2个半音。8192对应于没有音高弯曲-发出的音高恰好是音符值的音高。弯音值与移频比之间的映射关系为:
FÈ 中号我吨吨ë d_ Ñ Ò 吨ëFÑ ø 吨é _ 米Ë 小号小号一个克Ë= 2p 我吨Ç ħ b ë Ñ d− 81924096 × 12
因此,您可以从以下公式获得合成器演奏的音符的频率:
440 × 2Ñ ø 吨ë - 6912.0+ p 我吨Ç ħ b ë Ñ d− 81924096 × 12
其中note是最后收到的Note On消息的7位MIDI音符编号;和弯音是最后接收到的14位值弯音消息。合成器首先将其弯音寄存器设置为8192,并且在接收“重置所有控制器”消息期间也将重置该值。
让我们来看下面的例子。您想要用以下频率轨迹表示长笛颤音:500 Hz,510 Hz,500 Hz,作为MIDI信息。
基符编号为:
ř ø ù Ñ d(69 + 12 × 对数2(500 / 440 ))= 71。
因此,您发送一条“ note on”消息,其note#等于71。这等于音高为:
440 × 2(71 − 69 )/ 12= 493.88
这是回火刻度上最接近的音高。您需要发送弯音消息以将音调提高以下倍数:
500493.88= 1.0124
并获得500 Hz。相应的弯音值为:
ř ø ù Ñ d(8192 + 4096 × 12 × 升ö 克21.0124 )= 9065
要获得510 Hz,弯音值应为:
ř ø ù Ñ d(8192 + 4096 × 12 × 升ö 克2510493.88)= 10469
因此,对于500、510、500 Hz,您的MIDI消息序列为:
- 注71
- 弯音9065
- ...
- 弯音10469
- ...
- 弯音9065
您可以将MIDI音符编号视为音高的“不可分割”部分。且音高弯曲是音高的多余“小数”部分。