37. MIDI数据
前面在乐器数字界面中提到,MIDI信息由数字数据组成。这里的数据,并不代表数据声音本身,正如在数字声音代表中谈到的, 而是一组包含着音乐演奏方法的信息,这些数据将一部分数据组传输到另一部分数据组当中来实现音乐的表达。
早期MIDI信息描述如“轻柔地弹奏中央C”。这种类型的MIDI信息非常常见,并且为学习MIDI信息的编码打下良好基础。
之前提到的语句“轻柔地弹奏中央C”是通过一系列的字母组合序列实现的。MIDI信息的工作方式是基本相同的,但是有两个重要区别。首先,电脑和含有微型处理器的MIDI乐器只懂得数数不懂得拼写。第二,MIDI信息不用字母,也不用0,1,2,3,4,5,6,7,8和9而是只用两个数字:0和1。
但是如原始语句“轻柔地弹奏中央C”这里的字母以字群的形式组成有意义的意群,而在二进制系统中数字0和1也用一定的方法集合组成了对于MIDI或者电脑微处理器有意义的MIDI信息。例如,数字序列 10010000 00111100 00011000在MIDI 语句中意思为“轻柔地演奏中央C”此处请注意0和1的意群组合与原始语句意群组合方式非常相似。
每一个0和1都代表一个二进制数字,也就是 比特。这些数字每八个组成一个 字节 (与作者的猫同名!),每一个字节可以表示0-255的数字。MIDI协议对每个特定数字给以特定用途。
字节被分为两种。128-255之间的字节叫做 状态字节。状态字节描述的是完成了什么以及在哪个信道完成。状态字节通常是MIDI信息中的第一个字节,由于总是以“1”开头,所以方便辨认。
表达0-127的数字是 数据字节。数据字节通常一对一对出现,通常描述的是需要添加的附加信息。数据字节在状态字节的后面,总是以“0”开头,因此也非常容易辨认。
为了保证这些比特以及字节的传输的瞬时性,MIDI以每秒31,250比特的速度传输每个比特。这种同一时间仅允许一个数字通过的传输方式叫做 串行。串行传输基本上可以发送所有的MIDI信息。
状态字节和数据字节的架构从一个字节到上千字节的长度。很多MIDI信息,如普通的演奏需求,通常由一个状态字节紧接着一个或者两个数据字节构成。
例如,一个单一的开启音符信息,就由一个状态字节紧接着两个数据字节组成。如一个MIDI命令可能描述的是MIDI信道1(状态字节)以最大力度(数据字节2)演奏中央C(数据字节1)。
此处需要解释的是数据字节定义演奏的音符,演奏的力度,MIDI系统中包括128个MIDI音符(比钢琴多),127个不同的力度 (0力度是特例)。
MIDI命令中任何变化都会产生不同的音乐结果。对于上面的范例,你可以将命令改变成为在MIDI第二信道演奏(状态字节),音符改为升C(数据字节1),并且应该是小一点的力度(数据字节2)。
使用这种技术使得音符的 起 止 命令很容易实现,并且容易控制音符起后的力度(叫做 后触发),弯音 以及其他上百种命令叫做 控制变化 命令,这些命令用来对音乐进行塑造。