|
楼主 |
发表于 2010-8-6
|
怎么样把调律数据写进xx yy zz这3个字节,要费一点功夫来解释。如果您看着头痛,可以跳过这一段。
头一个字节xx好理解,就是MIDI音符编号。从0到7F,中央C是3C,大家都很熟悉。
后两个字节yy zz指出xx音符升高的量(为了让事情简单些,这里只加不减)。两个字节共有14比特(最高位必须为0),最大的数目就是2的14次方,16384。而每个半音是100音分,所以往yy zz里写01 24(四舍五入,十进制164)就等于升高1音分。换句话讲,yy zz中的数据是以0.0061音分为单位的数值。
3个字节同为7F是一种特殊情况,意味该音符不作改变,维持原来的音高。有的机器音域不够128个音,就用7F把这条信息填满。
这里的和校验与Roland使用的算法不同,是将头、尾以外的字节做异或(XOR)运算。请喜欢刨根问底的朋友们原谅,在此不能细讲逻辑运算的道理了。
还有一条实时系统专用信息,用来改变单独一个音或若干音的调律:
F0 7F 08 02 tt ll(kk xx yy zz) F7
有些字节与前两条命令相同,我们注意到第二字节是7F,表示实时信息;第二个副识别号02表示改变音符。
tt和前面介绍过的一样,是调律程序号。ll指出要改变多少音符,可以用一条命令同时改动若干音符。
每个音符都有自己的一套数据,就是括号中的4个字节。kk表示音符编号,xx yy zz和前面讲过的一样,不再重复。
这条命令有很高的优先权,对于具体的执行也有较严格的要求。它要求立即执行,如果有正在发声的音符,也要立即改变,不得中断发音,也不准发出能被听见的杂音。
为调律定义的两个注册控制器03和04用来选择调律集和调律库,意思和我们已经熟悉的选择音色及音色库有点相象。在我们许多人还没有开始使用调律的功能之时,MIDI规定已经为我们准备好了128X128=16384种调律的存放地址,真是非常具有超前意识。
前面已经讲过的使用方法,下面仅结合实例作一些简单解释。
例1. 调用某调律集的控制变换(运行状态):
Bn 64 03 65 00 06 tt
其中,n是通道号,tt是调律程序号。
例2. 调用下一个调律集
Bn 64 03 65 00 60 7F
控制器60(十进制96)使数据加1,如果先发过例1的命令,本命令把tt号加1。
例3. 调用前一个调律集
Bn 64 03 65 00 61 7F
控制器61(十进制97)使数据减1,如果先发过例1的命令,本命令把tt号减1。
调用调律库的命令基本相同,把03换成04就是了。
老巴赫的数学一定非常棒。作为一个德国人,生来好思索钻研,他所生活的时代大数学家辈出,很多是他的老乡(德国人)。那时的作曲家们不象后来浪漫派那样感情奔放,溢于言表,而是把自己的感情深深隐藏在复杂的结构之中。再看他的作品中那么多复杂的对位,整整齐齐天衣无缝,那肯定不是凭感觉写出来的,只怕有的地方反复计算过多次。他对于用计算方法得出的十二平均律倍加赞赏,因为有了这样精密相等的关系,转起调来方便多了,他结构复杂的多声部“高楼大厦”总算有了一个坚实的基础。高兴之下欣然命笔,老巴赫写出了不朽名篇十二平均律钢琴曲集。这是举世无双的四十八颗钻石,常听常新,百听不厌。 |
|