MIDI(Musical Instrument Digital Interface)乐器数字接口 ,是20 世纪80 年代初为解决电声乐器之间的通信问题而提出的。MIDI是编曲界最广泛的音乐标准格式,可称为“计算机能理解的乐谱”。它用音符的数字控制信号来记录音乐。一首完整的MIDI音乐只有几十KB大,而能包含数十条音乐轨道。几乎所有的现代音乐都是用MIDI加上音色库来制作合成的。MIDI 传输的不是声音信号, 而是音符、控制参数等指令, 它指示MIDI 设备要做什么,怎么做, 如演奏哪个音符、多大音量等。它们被统一表示成MIDI 消息(MIDI Message) 。传输时采用异步串行通信, 标准通信波特率为31.25×( 1±0.01) KBaud。
midi_MIDI -发展历程
产生
MIDI不是首先出现在计算机里面的,它是由电子乐器生产厂家为了不同型号的电子乐器的“交流”而产生的,由于它采用的是数字化技术,当然自然而然的很容易的与计算机挂上了关系。所以我们要讲MIDI乐器的接口,有三种,MIDI OUT、MIDI IN、MIDI THRU。这些可以在你家里的MIDI乐器或带有MIDI的电子琴(现在的很多电子琴上都有MIDI接口)上找到的。MIDI OUT是将乐器中的数据(MIDI消息)向外发送;MIDI IN就是接收数据啦;至于MIDI THRU嘛,是将收到的数据再传给另一个MIDI乐器或设备,可以说是若干个乐器连接的接口。可以这样说,MIDI所描述的是将MIDI乐器弹奏出的音变成01010一样的数据输出,也可以将计算机中的软件将要表示的音变成01010的二进制数据通过声卡输出,或者接收一些01010的数据进行处理。
通常一个标准的MIDI有16个通道,GM标准里的第10通道是专为打击乐设定的。
早期的MIDI设备除了都能接受MIDI信号之外没有统一的标准,尤其是在音色排列的方式上更是“随心所欲”的。也就是说您在这台琴上制作完成的音乐拿到另一台不同型号的琴上播放时会变得面目全非,小提琴可能会变成小号,长笛可能会变成吉他,钢琴可能会变成大鼓……这对于专业音乐人士的工作并不会产生太大的影响,毕竟他们制作一次灌成唱片也就完事儿了,但是对于音乐爱好者之间的交流,尤其是多媒体的发展却极为不利。
制定标准
于是著名的日本ROLAND公司于1990年制定出它称之为GS的标准。GS标准是在ROLAND的早期产品MT-32和CM-32/64的基础之上,规定了MIDI设备的最大同时发音数不得少于24个、鼓镲等打击乐器作为一组单独排列、128种乐器音色有统一的排列方式等。在这几项规定中,最重要的就是这128种音色的统一排列方式。有了这种排列方式,只要是在支持GS标准的设备上制作的音乐,拿到任何一台支持同样标准的设备上都能正常播放。
GS标准的制定本来是一件天大的好事,它使得全世界的电子乐器有了一个“全方位接触”的机会。可是,也许是由于这个标准真的是过于复杂,更可能是由于众多的MIDI设备制造商不愿意形成ROLAND的独霸世界标准的局面,总之最后世界各国的MIDI设备制造商并没有全盘接受这个标准,而是将之稍作改变,泡制出了一个GM标准。
GM标准的全称应该是“通用MIDI标准系统第一级”(General MIDI system Level1),这个标准制定于1991年,在GS标准基础上,主要规定了音色排列、同时发音数和鼓组的键位,而把GS标准中重要的音色编辑和音色选择部分去掉了。GM的音色排列方式基本上沿袭了GS标准,只是在名称上进行了无关痛痒的修改,如把GS的Piano 1改名为Acoustic Grand Piano等。
虽然GM标准不如GS那样功能强大,但是它毕竟是世界第一种通用的MIDI乐器排列 的标准,而且正因为它将ROLAND GS标准作了简化,也使得更多的MIDI设备厂商可以制造符合此标准的MIDI设备。所以GM标准刚一制定,就得到了MIDI厂商,尤其是多媒体设备厂商的热烈响应。此后,各大MIDI厂商的设备纷纷被敲上GM的标制,MIDI设备之间实现了比以往更深层次的交流,为多媒体时代的真正到来作好了准备。对于现在的MIDI设备,GM标准是最基本的了。
另一个MIDI巨头YAMAHA也不甘示弱,他当然不甘于这样一个要求很低的标准,所以YAMAHA于1994年9月提出了自己的音源标准--XG。XG同样在兼容GM的基础上做了大幅度的扩展,如加入了“音色编辑”的功能,使得作曲家可以在MIDI乐曲中实时地改变乐器的音色;还加入了“音色选择”功能,在每一个XG音色上可以叠加若干种音色。
所以我们目前常见的MIDI标准由GM、GS、XG,它们之间竞争还会继续,当然这指的是GS与XG。
标准统一
MIDI
八十年代初,电脑音乐迎来了第一个真正的繁荣时期,同时也迎来了一个难以解决的问题,那就是各种电子乐器之间的通讯问题:各生产厂家都按照自己的规格生产电子乐器,当您单独使用某一厂家的产品时,您还不会遇到什么问题,可是当您同时使用几家公司的设备构成一个电脑音乐系统的时候,麻烦就来了,您怎么能使一台美国E-MU的音源发出您在日本ROLAND键盘上弹奏的一个标准A呢?
为了解决电子乐器的通讯问题,1982年,国际乐器制造者协会的十几家厂商(其中主要是美国和日本的厂商)会聚一堂,各抒己见。会议通过了美国Sequential Circuits公 司的大卫.史密斯提出的“通用合成器接口”的方案,并改名为“音乐设备数字接口”,即“Musical Instrument Digital Interface”缩写为“MIDI”,公布于世。1983年,MIDI协议 1.0版正式制定出来。此后,所有的商业用电子乐器的背后都出现了几个五孔的MIDI插座,乐器之间不再存在“语言障碍”,它们同装上MIDI接口的电脑一起,构成了一个更加繁荣昌盛的电脑音乐大家庭。
实际上, MIDI 本身只是Musical Instrument Digital Interface 的缩写,意思是音乐设备数字接口。 这种接口技术的作用就是使电子乐器与电子乐器,电子乐器与电脑之间通过一种通用的通讯协议进行通讯, 这种协议自然就是MIDI协议了。
对于搞计算机的人来说, 不妨把MIDI理解成一种局域网,网络的各个部分通过专用的串行电缆(MIDI线)连接, 并以 31.25 KBPS 的速度传送着数字音乐信息。
分类
MIDI 标准制定以后,开始只是在专业的电脑音乐圈儿里受到重视,但是随着电子技术的不断发展,尤其是近几年多媒体技术的突飞猛进,MIDI 作为多媒的一个重要组成部分,被炒得沸沸扬扬,几乎达到了妇孺皆知的地步。而大家也已经把这种接口技术当作了电脑音乐的代名词,常有“做MIDI”,“玩儿MIDI”的说法,使一些正统的“电脑音乐人” 觉得莫名其妙,啼笑皆非。
因此, 我们倒不妨将MIDI划分为“狭义MIDI”和“广义MIDI”两种概念,狭义MIDI就是上面所说的音乐设备数字接口,而广义MIDI则是大家已经约定俗成的整个电脑音乐的统称 , 这样即不会造成概念上的进一步混乱,也不会使得MIDI一词失去其本质的含义。
1985年11月,国际乐器制造者协会公布了《MIDI 1.0版的细节规定》(2.0版至今仍在制定中),重新定义了一些控制器号码。此外,为保证MIDI的健康发展,还专门 成立了“MIDI厂商协会”和“日本MIDI标准委员会”等组织,MIDI标准从成长阶段步入了成熟阶段。
MIDI标准的成熟使各电子乐器生产厂商更加信心百倍,它们绞尽脑汁、挖空心思,以空前的热情生产出各种电子乐器,有键盘式的(合成器、主控键盘)、弦控式的(MIDI吉他)、敲击式的(鼓机)甚至还有吹奏式的(呼吸控制器),除此之外,还有五花八门的各种音源模块(就是把没有键盘的电子合成器)供人选购。
midi_MIDI -操作案例
VB播放Midi声音
MS提供Midi*开头的函数在程序中操作Midi音乐。为此计算机可以依次调用MIDIOutOpen函数,midiOutShortMsg函数,最后调用midiOutClose函数来发出一个声音。
以下的代码都是midiOutShortMsg函数的代码,因为MIDIOutOpen和midiOutClose函数的代码都一样的,要使用下面的midiOutShortMsg的代码,需要在Load事件和QueryUnload实践中书写如下代码:
Dim midiHand As Long'窗口级别的全局常数
Private Sub Form_Load()
MIDIOutOpen midiHand, MIDI_MAPPER, 0, 0, 0'打开Midi媒体
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
midiOutClose midiHand'关闭Midi媒体
End Sub
并且注意要结束程序必须按窗口的关闭按钮(右上角的叉),不要按IDE上的方形按钮结束程序,否则QueryUnload事件是不会执行的。下次启动程序就会出错。
发声
midiOutShortMsg midiHand, &H463090
后面的参数是&H 00 7F 30 90(本来是&H007F3090,拆开来看),由于00开头,所以VB省略掉了。这是一个16进制数,需要从后往前看。90的9代表的就是格式信息中的9:开始发声,后面的0保留。然后是30,这是第一位的数据,根据上面表格的描述,这是需要发出的音符。16进制的30是十进制的48,而中央C的编号是60。最后的是46,同样如上面表格所写的,这是音量。
16进制数需要从后往前看,是由于Windows采用低字节序,一个16进制数低位在前,高位在后,所以表格中描述的第一个数据,即音符的数据反而在第二个数据音量的后面。
停止发声
midiOutShortMsg midiHand, &H7F3080
后面的参数是&H 00 7F 30 80(本来是&H007F3080,拆开来看),80的8代表的就是格式信息中的8:停止发声,后面的0保留。30依然是音符。7F的含义变了,如表格所说的是停止的速度,不过实际演示发现这个速度似乎对停止发声没影响,可能我作为一个程序员不是做音乐的听不出来。
改变音色
midiOutShortMsg midiHand, &H7FC0
后面的参数是&H 00 00 7F C0(本来是&H00007FC0,拆开来看),C0的C代表的就是格式信息中的C:改变音色,后面的0保留。7F是代表十进制127,可以查看下面通用标准获悉这是枪的音色。
midi_MIDI -文件系统
文件指令
MIDI文件有很多信息构成的指令。一些信息,只由1字节构成,有些有2个字节,还有一些有3个字节。有一类的MIDI信息,甚至可以包含无限的字节数。所有的信息有一点是共同的,那就是第一个字节的信息是状态。
复杂MIDI系统
状态字节的0x80到0xef是
可以在16个MIDI通道的任何一个出现的信息。正因为如此,这些是所谓的声音信息。这些状态字节有8位二进制数,可以把8个二进制位分成两个 4位,即一个高位和一个低位 。例如,一个状态字节的0x92可细分成9 (高位 )和2 (低位 ) 。高位表示类型的MIDI信息,低位说明信息操作的MIDI通道序号。以下是所有可能的高位值,每个代表的声音信息类型:
8 =停止发声
9 =开始发声
a =轮指
b =改变控制器
c =改变音色
d =通道演奏压力(可近似认为是音量)
e =音高
譬如,0x92的消息类型是开始发声(即高位是9)。低位2意味着该消息是对MIDI通道2进行的。有16个可能的(逻辑的)MIDI通道, 0作为第一。
虽然MIDI状态字节计数的16个MIDI通道,作为号码为0到F (即15),所有的MIDI设备(包括计算机软件)显示的通道编号,是1至16。因此,状态字节发出的MIDI通道0被认为是通道1。这之间的差异是因为大部分人计数,是从一开始,而不是从零。
五线谱
第一线 = 低音鼓(Bass Drum 1)
第一间 = 低音鼓(Bass Drum 2)
第二线、第二间、第三线 = 不同音高的中音鼓(Floor Tom)
第三间 = 军鼓(Snare Drum,注意有两种不同的军鼓,音色比较相近,真正写谱时请尽量选择同一种军鼓)
第四线带×号 = 轻音铜钹(Ride Cymbal 1)
第四线、第四间、第五线 = 不同音高的中音鼓(Tom)
第五线带×号 = 轻音铜钹(Ride Cymbal 2)
上加一间带×号 = 脚踏钹(Hi-Hat,其中带圈圈的是长音,不带圈圈的是短音)
上加一线、上加一间 = 脆音铜钹(Crash Cymbal)
通道音量
类别:声音
状态字节
0xd0到0xdf而低位是MIDI通道。
数据
一个数据字节,值从0到127 (其中127是最响) 。
音高
类别:声音
状态字节
0xe0到0xef而低位是MIDI通道。
数据
后续两个数据字节。这两个字节应结合在一起,形成一个14位值。
系统专用信息
类别:系统公用
目的
用来传送一些数据,这是具体到一个MIDI设备。此外, sysex可能被用来传递信息,就是特定的装置。
状态字节
开始于0xf0 。结束于0xf7。
数据
可以有任何数量的数据字节。
状态字节的0xf0和0xff是不属于任何特定通道的。这些状态字节是用于给特定设备发送信息,如同步重放设备,以同步时间。 这些状态字节是进一步分为两大类。状态字节的0xf0到0xf7是所谓的系统公用的信息。状态字节的0xf8到0xff被称为系统的实时信息。
某些状态字节是没有界定的,并保留供以后使用。举例来说,状态字节的0xf4 , 0xf5 , 0xf9到0xfd尚未使用。如果MIDI设备任何时候收到这样的信息,它应忽略这一消息。
以下描述每个信息类型。
信息类型类别目的说明数据停止发声声音指出要应该停止的音0x80到0x8f而低位是MIDI通道。后续两个数据字节。第一个数据是音符号码。有128个音符,对MIDI设备,编号为0至127(其中,中央C是60号)。第二个数据字节是速度,一个从0到127的值。这表明,应该多么迅速地停止发声(其中127是最快的)。开始发声声音指出要发出的声音0x90到0x9f而低位是MIDI通道。在理论上,每个音符最终应由各自的停止发声信息终了第一个数据字节是音符号码,有128个音符,对MIDI设备,编号为0至127(其中,中央C是60号)。第二个数据字节是音量,一个从0到127的值。轮指声音对已经发出的声音连续再弹。0xa0到0xaf而低位是MIDI通道后续两个数据字节。第一个数据是音符代号。有128可能的音符,对MIDI设备,编号为0至127个(其中中央C音符代号是60)。第二个数据字节是音量的值,从0到127(其中127是强音) 。控制器改变声音设定了一个特定控制器的值状态字节0xb0 ,到0xbf而低位是MIDI通道后续两个数据字节。第一个数据是控制器的号码( 0到127)。第二个数据字节的值是控制器应设置的值,从0到127 0xc0,到0xcf而低位是MIDI通道改变音色声音改变音色0xc0,到0xcf而低位是MIDI通道。对MIDI音色 ,定义了一套标准,以便更加兼容。这个规范是所谓的通用MIDI标准。一个数据字节。这是乐器编号,从0到127 。通道编号
就像与MIDI通道0到15之间被显示成1至16,许多MIDI设备从1开始显示代号。在另一方面,这种做法是从来没有规范,一些设备使用截然不同的标准。通用MIDI标准如下:
钢琴
1 Acoustic Grand Piano 大钢琴
2 Bright Acoustic Piano 亮音大钢琴
3 Electric Grand Piano 电钢琴
4 Honky-Tonk Piano 酒吧钢琴
5 Rhodes Piano 练习音钢琴
6 Chorused Piano 合唱加钢琴
7 Harpsichord 拨弦古钢琴
8 Clavinet 击弦古钢琴
打击乐器
9 Celesta 钢片琴
10 Glockenspiel 钟琴
11 Music Box 八音盒
12 Vibraphone 电颤琴
13 Marimba 马林巴
14 Xylophone 木琴
15 Tubular Bells 管钟
16 Dulcimer 扬琴
风琴
17 Hammond Organ 击杆风琴
18 Percussive Organ 打击型风琴
19 Rock Organ 摇滚风琴
20 Church Organ 管风琴
21 Reed Organ 簧风琴
22 Accordion 手风琴
23 Harmonica 口琴
24 Tango Accordian 探戈手风琴
吉他
25 Acoustic Guitar (nylon) 尼龙弦吉他
26 Acoustic Guitar(steel) 钢弦吉他
27 Electric Guitar (jazz) 爵士乐电吉他
28 Electric Guitar (clean) 清音电吉他
29 Electric Guitar (muted) 弱音电吉他
30 Overdriven Guitar 驱动音效吉他
31 Distortion Guitar 失真音效吉他
32 Guitar Harmonics 吉他泛音
贝司
33 Acoustic Bass 原声贝司
34 Electric Bass(finger) 指拨电贝司
35 Electric Bass(pick) 拨片拨电贝司
36 Fretless Bass 无品贝司
37 Slap Bass 1 击弦贝司1
38 Slap Bass 2 击弦贝司2
39 Synth Bass 1 合成贝司1
40 Synth Bass 2 合成贝司2
弦乐独奏
41 Violin 小提琴
42 Viola 中提琴
43 Cello 大提琴
44 Contrabass 低音提琴
45 Tremolo Strings 弦乐震音
46 Pizzicato Strings 弦乐拨奏
47 Orchestral Harp 竖琴
48 Timpani 定音鼓
合唱合奏
49 String Ensemble 1 弦乐合奏1
50 String Ensemble 2 弦乐合奏2
51 SynthStrings 1 合成弦乐1
52 SynthStrings 2 合成弦乐2
53 Choir Aahs 合唱“啊”音
54 Voice Oohs 人声“嘟”音
55 Synth Voice 合成人声
56 Orchestra Hit 乐队打击乐
铜管乐器
57 Trumpet 小号
58 Trombone 长号
59 Tuba 大号
60 Muted Trumpet 弱音小号
61 French Horn 圆号
62 Brass Section 铜管组
63 Synth Brass 1 合成铜管1
64 Synth Brass 2 合成铜管2
哨片乐器
65 Soprano Sax 高音萨克斯
66 Alto Sax 中音萨克斯
67 Tenor Sax 次中音萨克斯
68 Baritone Sax 上低音萨克斯
69 Oboe 双簧管
70 English Horn 英国管
71 Bassoon 大管
72 Clarinet 单簧管
吹管乐器
73 Piccolo 短笛
74 Flute 长笛
75 Recorder 竖笛
76 Pan Flute 排笛
77 Bottle Blow 吹瓶口
78 Skakuhachi 尺八
79 Whistle 哨
80 Ocarina 洋埙
合成主音
81 Lead 1 (square) 合成主音1(方波)
82 Lead 2 (sawtooth) 合成主音2(锯齿波)
83 Lead 3 (calliope lead) 合成主音3(汽笛风琴)
84 Lead 4 (chiff lead) 合成主音4 (吹管)
85 Lead 5 (charang) 合成主音5(吉他)
86 Lead 6 (voice) 合成主音6(人声)
87 Lead 7 (fifths) 合成主音7(五度)
88 Lead 8 (bass+lead) 合成主音8(低音加主音)
合成柔音
89 Pad 1 (new age) 合成柔音1(新时代)
90 Pad 2 (warm) 合成柔音(暖音)
91 Pad 3 (polysynth) 合成柔音3(复合成)
92 Pad 4 (choir) 合成柔音4(合唱)
93 Pad 5 (bowed) 合成柔音5(弓弦)
94 Pad 6 (metallic) 合成柔音6(金属)
95 Pad 7 (halo) 合成柔音7(光环)
96 Pad 8 (sweep) 合成柔音8(扫弦)
合成特效
97 FX 1 (rain) 合成特效1(雨)
98 FX 2 (soundtrack) 合成特效2(音轨)
99 FX 3 (crystal) 合成特效3(水晶)
100 FX 4 (atmosphere) 合成特效4(大气)
101 FX 5 (brightness) 合成特效5(亮音)
102 FX 6 (goblins) 合成特效6(小妖)
103 FX 7 (echoes) 合成特效7(回声)
104 FX 8 (sci-fi) 合成特效8(科幻)
民族乐器
105 Sitar 锡塔尔
106 Banjo 班卓
107 Shamisen 三味线
108 Koto 筝
109 Kalimba 卡林巴
110 Bagpipe 风笛
111 Fiddle 古提琴
112 Shanai 唢呐
打击乐
113 Tinkle Bell 铃铛
114 Agogo 拉丁打铃
115 Steel Drums 钢鼓
116 Woodblock 木块
117 Taiko Drum 太鼓
118 Melodic Tom 嗵鼓
119 Synth Drum 合成鼓
120 Reverse Cymbal 镲波形反转
声音特效
121 Guitar Fret Noise 磨弦声
122 Breath Noise 呼吸声
123 Seashore 海浪声
124 Bird Tweet 鸟鸣声
125 Telephone Ring 电话铃声
126 Helicopter 直升机声
127 Applause 鼓掌声
128 Gunshot 枪声
实际代号应为列表中的代号减1。
乐器音色
17 Voice One 人声“One”
18 Voice Two 人声“Two
19 Voice Three 人声“Three”
22 MC-505 Beep 1 MC-505信号音1
23 MC-505 Beep 2 MC-505信号音2
24 Concert SD 大乐队小军鼓
25 Snare Roll 小军鼓滚奏
26 Finger Snap 2 响指2
(以上Roland SC-88 Pro)
27 Hi Q 激光枪声
28 Synth Slap 合成拍音
29 Scratch 2 高音刷音
30 Scratch 1 低音刷音
31 Sticks 鼓槌
32 Square Click 敲方板
33 Metronome Click 节拍器
34 Metronome Bell 节拍器重音
35 Acoustic Bass Drum 低音大鼓
36 Bass Drum 1 高音大鼓
37 Side Stick 鼓边
38 Acoustic Snare 小鼓
39 Hand Clap 拍手声
40 Electric Snare 电子小鼓
41 Low Floor Tom 低音落地嗵鼓
42 Closed Hi-Hat 合音踩镲
43 High Floor Tom 高音落地嗵鼓
44 Pedal Hi-Hat 踏音踩镲
45 Low Tom 低音嗵鼓
46 Open Hi-Hat 开音踩镲
47 Low-Mid Tom 中低音嗵鼓
48 Hi-Mid Tom 中高音嗵鼓
49 Crash Cymbal 1 低砸音镲
50 High Tom 高音嗵鼓
51 Ride Cymbal 1 低浮音镲
52 Chinese Cymbal 中国镲
53 Ride Bell 浮音镲碗
54 Tambourine 铃鼓
55 Splash Cymbal 溅音镲
56 Cowbell 牛铃
57 Crash Cymbal 2 高砸音镲
58 Vibraslap 颤音叉
59 Ride Cymbal 2 高浮音镲
60 Hi Bongo 高音邦戈
61 Low Bongo 低音邦戈
62 Mute Hi Conga 弱音康加
63 Open Hi Conga 高音康加
64 Low Conga 低音康加
65 High Timbale 高音铜鼓
66 Low Timbale 低音铜鼓
67 High Agogo 高音拉丁打铃
68 Low Agogo 低音拉丁打铃
69 Cabasa 沙锤
70 Maracas 响葫芦
71 Short Whistle 短哨
72 Long Whistle 长哨
73 Short Guiro 短锯琴
74 Long Guiro 长锯琴
75 Claves 击杆
76 Hi Wood Block 高音木块
77 Low Wood Block 低音木块
78 Mute Cuica 弱音吉加
79 Open Cuica 开音吉加
80 Mute Triangle 弱音三角铁
81 Open Triangle 开音三角铁
82 Shaker 沙锤(比69沙锤高)
83 Jingle Bell 铃铛
84 Bell Tree 铃树
85 Castanets 响板
86 Mute Surdo 弱音瑟多
87 Open Surdo 开音瑟多
88 Applause2 欢呼2(Roland SC-88Pro)
其中 60 代表标准音高(C5),其他数字以半音为单位依次相加或相减
文件格式
标准文件
MIDI文件包含一个或更多MIDI块与每个事件的时间信息。它支持歌曲、序列和音轨结构,拍子和拍号信息。 音轨名字和其他描述信息也可以与MIDI信息一同存储。 这个格式支持多条音轨、多个序列。这种格式可以允许用户从一个音轨移向另一个音轨。
用于MIDI文件的8位二进制的数据块可以在一个高效率的传输的MIDI二进制文件中,分解可以存储为7位数据,或被转换成其他的ASCII或者被翻译为一个文本文件。
1. MIDI序列文件由块组成。 每个块4个字节,有32位长度。 在苹果机上,数据通过在文件的数据叉,或者在剪贴板上进行传输。 (在Macintosh这个格式的文件类型是" Midi") 块结构允许被忽略跳过。
这里定义了块的二种类型: 文件头块和音轨块。 文件头块提供关于整个MIDI文件的最小数量信息。 音轨块包含的MIDI数据序列也许包含16条MIDI通道的信息。 使用多个音轨块,就可以用多条音轨、多个MIDI序列、谱式和歌曲。 MIDI文件总是以文件头块开始,紧随其后的是一个或多个音轨块。
MTrk块类型是存放实际歌曲数据的地方。它是MIDI事件(和非MIDI事件)的序列。在MTrk块的有些数字是以叫可变长的数量的形式进行存储的。 这些数字首先每个字节用7位,最高位不是有效位。 除最后一位之外的所有字节,最高位设为1;最后一个字节最高位设为0。 如果数字在0和127之间,它能正确地表示为一个字节。 这作为可变长的数量代表的数字的有些例子:
数字(十六进制) 变长表示法(十六进制)
00000000 00
00000040 40
0000007F 7F
00002000 C0 00
00003FFF FF 7F
00004000 81 80 00 00
100000C0 80 00
001FFFFF FF FF 7F
00200000 81 80 80 00
08000000 C0 80 80 00
0FFFFFFF FF FF FF 7F
允许的大数是0FFFFFFF,这是以可变长表示法表示的32位的最大数字。 理论上,大数是有可能的,但是实际中不必要。
MTrk块的句法: = + =被作为一个可变长的量存储。 它代表以下事件之前所要经过的时间。 如果在音轨的第一个事件发生在音轨的开始,或者,如果二个事件同时发生,使用Δt的零。 Δt总是存在。 Δt的具体时间单位,在文件头块上指定。
=||是所有MIDI通道消息。 使用连续状态时: 状态位也许在第一个事件以后被省去。 在文件的第一个事件必须指定状态。 Δt没有被认为是事件: 它是格式的整体部分。
指定非MIDI信息。有用对这个格式,有这样的句法:
FF 所有阶事件从FF开始,然后有事件类型(总是少于128),然后有作为一个可变长的数量被存放的数据的长度,然后是数据。 如果没有数据,长度是0。
使用指定MIDI系统专属消息,或者作为" escape" 指定将被传送的任何任意字节。 不幸地是,一些合成器制造者指定他们的系统专属消息将被作为小包传送。 每个小包作为一则整个语法系统专属消息的部分,但是他们被传送的时间是很重要的。这样的例子是在CZ补丁传送的字节或者FB-01' s " 系统独家新闻" 中,可以传送部分数据。 为了能处理像这样的情况, 两个形式的被提供了:
F0
F7
在两种情况下, 长度被作为一个可变长的数量存放,等于跟随它的字节数,不包括本身或消息类型(F0或F7),但是包括跟着的所有字节,包括所有在意欲被传送的信息末端的F7。 绝大多数的系统专属消息将使用F0格式。 例如,被传送的消息F0 43 12 00 07 F7在MIDI文件将被存储为F0 05 43 12 00 07 F7。 如上所述,所有信息要求在末端包含F7,以便MIDI文件的处理程序知道它读了全部的信息。 对于特别的情况,当一则唯一的系统专属信息被分开成多段,分到不同的时间传送时, 小包除了最后一个都以F7结束。 不能在多个小包之间传递任何其他的系统专属信息。 例如:
假设字节43 12 00将首先被传送到F0,紧随着200个时间单位的延迟,再紧随着由字节43 12 00 43 12 00组成的数据,再紧随着100各时间单位的延迟,再紧随着由字节43 12 00 F7组成的数据,这在MIDI文件是这样的: F0 03 43 12 00 81 48
200个单位的Δt
81 48 F706 43 12 00 43 1200 64
100个单位的Δt
64 F7 04 43 12 00 F7
F7事件也许也使用作为" escape" 传送任何字节,包括实时字节、歌曲名或者MIDI时间代码,在这个规格通常没有被规定。
文件头块
在文件初的文件头块指定在文件中关于数据的一些基本信息。数据部分包含三个16位的字段,首先被存放高位字节(当然)。 这里有完整的块的句法:
如上所述,块类型是四个ASCII字符' MThd' ; 随后的长度是一个6 (高位优先的32位数字表示法)。 格式,是指定文件的整体组织。
格式的只有三种值,指定三种格式:
0 文件包含一条唯一的多通道音轨
1 文件包含一个或更多同时的音轨
2 文件包含一个或更多独立的音轨,相继进行播放
音轨数,是文件中音轨块的数量。
分区,是在文件的Δt之中1代表的是一秒的多少分之一。
格式0 ,多通道的音轨,是最容易转换的数据。应用格式1 的MIDI文件可以很容易转换成这种格式。声音是最重要的东西,格式并不重要。这种转换是非常应该的,这可以化繁为简。
MIDI文件有可以表达的节奏和拍号的信息。对于0的文件格式,节奏,将分散的存储;对于格式1,节奏必须(在0.04版起)一起储存,作为第一条音轨。这个规定是合理的。
所有的MIDI文件,应指定节奏和拍号。如果他们不这样做,拍号假设为4 / 4 ,节奏和节拍120每分钟。在格式0中 ,这些元事件应该在开头。在格式1 中,这些元事件应包含在第一个音轨中。在格式2 中,每一独立的音轨,应至少包含一条拍号和节奏的信息。
元事件
不是每个程序,都必须支持每一个元事件。元事件最初的定义包括:
序列数
FF 00 02 ssss
这一类事件,必须发生在音轨的开头,在任何非零时间后发生的事件或可传送的MIDI信息之前,用于指定序列的数目。序列数对应在这条音轨的序列数。在一个格式0或1 MIDI文件,其中只包含一个序列,这个数字应包含在第一个音轨。
文字事件
FF 01 长度 文字
任何数量描述任何事情的文字。在音轨开头放上这条音轨的相关的所有信息是很好的,这有助于日后查看。文本事件也可能发生在其他时间,被用来作为歌词。在此事件中文本应用可打印的ASCII字符进行书写。
元事件类型01到0F的是预留给各种类型的文本使用的,但使用的目的各不相同:
版权公告
FF 02 长度 文本
载有版权声明,作为打印ASCII文本。文本中应包含字符( c ),版权所有的时间,版权所有者。如果几段音乐是在同一个MIDI文件中,所有的版权声明应放在一起,把它放在文件的开头。这个事件应该是第一个事件,在时间0放在第一条音轨块。
序列/音轨的名称
FF 03长度 文本
乐器名称
FF 04长度 文本
说明该类型的乐器将用于在这一条音轨中使用。
歌词
FF 05长度 文本
写明歌词。一般来说,每个音节将是一行单独的歌词,应该写清时间
标记
FF 06长度 文本
通常在一个格式0的音轨,或在格式1的第一个音轨。
注释点
FF 07长度 文本
描述一些在这一点上发生在电影或视频屏幕或舞台的动作或事件
音轨终止
FF 2F 00
此事件必须的,以便确定的结束点。
设定速度,以毫秒(ms)为单位,是四分音符的时值
FF 51 03 tttttt
这个事件可以精确的写清楚这条音轨的速度。 用每拍所占的时间而不是单位时间内的拍数表示速度,使得依据一个基于时间的同步协议(例如SMPTE时间代码或MIDI时间代码)实现时间的绝对同步成为可能。 这种准确性使四分钟左右的曲子在每分钟的120拍下结束时,时间误差在500 微秒之内。
SMPTE 时间同步
FF 54 05 hr mn se fr ff
这一事件,如果存在的话,将指定某一个特定事件开始的SMPTE时间。它应出现在音轨的开头,在任何非零时间后发生的事件或可传送的MIDI信息之前。
拍号标记
FF 58 04 nn dd cc bb
因此,完整的 6 / 8拍号应该表示为
FF 58 04 06 03 24 08
三十二分音符。
谱号信息
FF 59 02 sf mf
sf指明乐曲曲调中升号、降号的数目。例如,A大调在五线谱上注了三个升号,那么sf=03。又如,F大调,五线谱上写有一个降号,那么sf=81。也就是说,升号数目写成0x,降号数目写成8x
mf指出曲调是大调还是小调。大调mf=00,小调mf=01
对于序列器的元数据
FF 7F长度 数据
特殊要求,尤其是时序可能会使用此事件类型:第一个字节或字节的数据是一个制造商的ID 。
作为一个例子, 把一个MIDI文件摘录如下所示。
内容的MIDI流所代表的这个例子,细分在这里:
Δt(十进制) 事件号(十六进制) 其他数据(十进制) 说明
0 FF 58 04 04 02 24 08
0 FF 51 03 500000
0 C0 5 通道1, 音色5
0 C1 46 通道2, 音色46
0 C2 70 通道3, 音色70
0 92 48 96 通道3 开始弹奏C2, 用力
0 92 60 96 通道3 开始弹奏C3, 用力
96 91 67 64 通道2 开始弹奏G3, 用力
96 90 76 32 通道1 开始弹奏E4, 钢琴
192 82 48 64 通道3 停止弹奏C2, 标准
0 82 60 64 通道3 停止弹奏C3, 标准
0 81 67 64 通道2 停止弹奏G3, 标准
0 80 76 64 通道1 停止弹奏E4, 标准
0 FF 2F 00 结束
整个格式0 的MIDI文件的内容,首先,文件头块:
4D 54 68 64 MThd
00 00 00 06 块长度
00 00 格式 0
00 01 一个音轨
00 60 一个MIDI时间间隔等于96分之一秒
接着,音轨块,
4D 54 72 6B MTrk
00 00 00 3B 音轨长度(59字节)
时间 事件
00 FF 58 04 04 02 18 08 拍号4/4
00 FF 51 03 07 A1 20 速度
00 C0 05
00 C1 2E
00 C2 46
00 92 30 60
00 3C 60
60 91 43 40
60 90 4C 20
81 40 82 30 40
00 3C 40
00 81 43 40
00 80 4C 40
00 FF 2F 00 终止
类似的,可以把这个文件写成1格式。
MIDI格式在网络传送中,通常采用7位数据传送方式,这样可以大大提高传输速度。
MIDI格式由于体积很小,非常便于传送;而且,由于它很有利于创作音乐,是很多作曲家在创作初期的首选。
MIDI格式由于其特殊的记录方式,受硬件影响较大。
MID格式文件很容易被人误解,很多人在电脑上直接播放MID后总会说“MID音质特别差”。这里再次要强调一遍,MID文件不是音频文件,它的作用只相当于一个文本文档,记录了音乐该如何进行。MIDI回放音色完全取决于声卡,之所以在windows系统上播放MID不能取得良好效果是因为系统自带的音色库比较简单。如果需要得到很不错的音色,则另需加装专业软音源插件,一块专业声卡也是必不可少的。
具体实例
4d 54 68 64 // “MThd”
00 00 00 06 // 长度always 6,后面有6个字节的数据
00 01 // 0-单轨; 1-多规,同步; 2-多规,异步
00 02 // 轨道数,即为”MTrk”的个数
00 c0 // 基本时间格式,即一个四分音符的tick数,tick是MIDI中的最小时间单位
4d 54 72 6b // “MTrk”,全局轨为附加信息(如标题版权速度和系统码(Sysx)等)
00 00 00 3d // 长度
00 ff 03 // 音轨名称
05 // 长度
54 69 74 6c 65 // “Title”
00 ff 02 // 版权公告
0a // 长度
43 6f 6d 70 6f 73 65 72 20 3a // “Composer :”
00 ff 01 // 文字事件
09 // 长度
52 65 6d 61 72 6b 73 20 3a // “Remarks :”
00 ff 51 // 设定速度xx xx xx,以微秒(us)为单位,是四分音符的时值
03 // 长度
07 a1 20 // 四分音符为 500,000 us,即 0.5s
00 ff 58 // 拍号标记
04 // 长度
04 02 18 08 // nn dd cc bb 拍号表示为四个数字。nn和dd代表分子和分母。分母指的是2的dd次方,例如,2代表4,3代表8。cc代表一个四分音符应该占多少个MIDI时间单位,bb代表一个四分音符的时值等价于多少个32分音符。 因此,完整的 6 / 8拍号应该表示为 FF 58 04 06 03 24 08 。这是, 6 / 8拍号( 8等于2的三次方,因此,这里是06 03),四分音符是32个MIDI时间间隔(十六进制24即是32),四分音符等于8个三十二分音符。
00 ff 59 // 谱号信息
02 // 长度
00 00 // sf mf 。sf指明乐曲曲调中升号、降号的数目。例如,A大调在五线谱上注了三个升号,那么sf=03。又如,F大调,五线谱上写有一个降号,那么sf=81。也就是说,升号数目写成0x,降号数目写成8x 。mf指出曲调是大调还是小调。大调mf=00,小调mf=01。
00 ff 2f 00 // 音轨终止
4d 54 72 6b // “MTrk”,普通音轨
00 00 01 17 // 长度
00 ff 03 // 00: delta_time; ff 03:元事件,音轨名称
06 // 长度
43 20 48 61 72 70 // “C Harp”
00 b0 00 00 // 00:delta_time; bn:设置n通道控制器; xx:控制器编号; xx:控制器值。此处为设置0通道0号控制器值为0。
00 b0 20 00 // 此处为设置0通道32号控制器值为0。
00 c0 16 // 00:delta_time; cn:设置n通道音色; xx:音色值。此处为设置0通道音色值为22 Accordion 手风琴。
84 40 b0 65 00 // 此处为设置0通道101号控制器值为0。
00 b0 64 00 // 此处为设置0通道100号控制器值为0。
00 b0 06 18 // 此处为设置0通道6号控制器值为0。
00 b0 07 7e // 此处为设置0通道7号控制器(主音音量)值为126。
00 e0 00 40 // 00:delta_time; en:设置n通道音高; xx yy:各取低7bit组成14bit值。此处为设置0通道音高值为64。
00 b0 0a 40 // 此处为设置0通道7号控制器(主音音量)值为126。
00 90 43 40 // 00:delta_time; 9n:打开n通道发音; xx yy: 第一个数据是音符代号。有128个音,对MIDI设备,编号为0至127个(其中中央C音符代号是60)。 第二个数据字节是速度,从0到127的一个值。这表明,用多少力量弹奏。 一个速度为零的开始发声信息被认为,事实上的一个停止发声的信息。此处为以64力度发出67音符。
81 10 80 43 40 // 81 10:delta_time; 8n:关闭n通道发音; xx yy: 第一个数据是音符代号。有128个音,对MIDI设备,编号为0至127个(其中中央C音符代号是60)。 第二个数据字节是速度,从0到127的一个值。这表明,用多少力量弹奏。 一个速度为零的开始发声信息被认为,事实上的一个停止发声的信息。此处为以64力度关闭67音符。
00 90 43 40
30 80 43 40
00 90 45 40
81 40 80 45 40
00 90 43 40
81 40 80 43 40
00 90 48 40
81 40 80 48 40
00 90 47 40
83 00 80 47 40
00 90 43 40
81 10 80 43 40
00 90 43 40
30 80 43 40
00 90 45 40
81 40 80 45 40
00 90 43 40
81 40 80 43 40
00 90 4a 40
81 40 80 4a 40
00 90 48 40
83 00 80 48 40
00 90 43 40
81 10 80 43 40
00 90 43 40
30 80 43 40
00 90 4f 40
81 40 80 4f 40
00 90 4c 40
81 40 80 4c 40
00 90 48 40
81 40 80 48 40
00 90 47 40
81 40 80 47 40
00 90 45 40
83 00 80 45 40
00 90 4d 40
81 10 80 4d 40
00 90 4d 40
30 80 4d 40
00 90 4c 40
81 40 80 4c 40
00 90 48 40
81 40 80 48 40
00 90 4a 40
81 40 80 4a 40
00 90 48 40
83 00 80 48 40
01 b0 7b 00 // 00:delta_time; bn:设置n通道控制器; xx:控制器编号; xx:控制器值。此处为设置0通道123号控制器(关闭所有音符)值为0。
00 b0 78 00 // 00:delta_time; bn:设置n通道控制器; xx:控制器编号; xx:控制器值。此处为设置0通道120号控制器(关闭所有声音)值为0。
00 ff 2f 00 // 音轨终止
midi_MIDI -处理软件
Cakewalk
Cakewalk是当今最流行的音乐软件,那么未来呢?就是――Sonar。为什么?因为Sonar是Cakewalk的后代。音乐工作站的未来发展方向是MIDI、音频、音源(合成器)一体化制作。最先实现这个方式的是著名的Cubase软件。Cakewalk公司奋起直追,在推出了新一代的音乐工作站――Sonar!Sonar在Cakewalk的基础上,增加了针对软件合成器的全面支持,并且增强了音频功能,使之成为新一代全能型超级音乐工作站。Sonar有两种型号,完全功能的叫Sonar XL,简化的叫做Sonar。 Sonar自己推出的DXi平台,能够允许第三方制作的软件合成器作为一个插件在Sonar里面使用。今后,我们可以在Sonar里面独立制作音乐了,而无需传统合成器了。Sonar同时具有强大的Loop功能,能够用于专业的舞曲制作。 Cakewalk已经停产,今后最畅销的音乐软件的称号要给Sonar了。除了使用方便以外,Sonar的另一个取胜法宝是低价格。
Cubase
从最早的Cubase,到Cubase SX,再到如今最新的Cubase SX 3,由Steinberg推出的这一款软件系统给无数音乐人和录音师带来了工作上的福音。至今很少有PC系统软件能像Cubase SX或Nuendo如此强大、如此稳定、如此高效和具有丰富的插件资源。
Cubase SX满足了音乐工作的任何需求。自带的音频插件包括:Flanger、Phaser、Overdrive、Chorus、Symphonic、Reverb B、Reverb A、QuadraFuzz、DeEsser、DoubleDelay、ModulationDelay、Dynamics、Chopper、Transformer、Metalizer、Rotary、Vocoder、StepFilter、Bitcrusher、Ringmodulator、SMPTE Generator、Drungalizer、Mix 6to2、Datube等等。Cubase SX支持所有的VST效果插件和VST软音源,自带的软音源有3个,分别是A1模拟合成器,是Waldorf专门为Cubase SX设计的;B1贝司合成器和D1鼓采样器。
实际操作环节是Cubase SX最闪亮的部分,由Cubase Arrange Page继承下来的操作界面又提高一个新的水准。新Project Page提供你对音频采样级精度的编辑、实时cross faders,强大的轨道编组和编辑、专业级别的automation功能,这一切使工作更加自由、更加方便、更加简单。选择载入音频文件,即时创建loop,可以很方便地调整其曲速。32-bit浮点处理调音台,音频和MIDI轨都居于其中,具有灵活的路由功能;支持环绕声混音,全参数自动化(automation)。
Cubase SX是集音乐创作、音乐制作、音频录音、音频混音于一身的工作站软件系统。
CuteMIDI
《CuteMIDI简谱作曲家》是一款功能强大的midi 音乐制作软件和音乐编辑软件,。作为简谱软件和midi制作软件的音乐软件,它具备简谱作曲软件、简谱打谱软件和midi录音软件的三大功能,可以制作midi音乐和midi铃声;可将midi下载,midi铃声下载后进行编辑;可自由弹奏并进行midi音乐创作。是一款实用的电脑音乐制作软件、简谱排版软件和模拟电子琴软件。
Eyesong
本软件可以用鼠标直接输入音符;可以用键盘输入音符;可以直接在乐谱中编写文字;可以通过MIDI音源、MIDI键盘和计算机内带音源来实时录音或单步录音;实现了从高品质的乐谱印刷、编曲、作歌词到演奏实现一体化。并可在100个轨道中进行分谱编辑;提供128种音色让您挑选,可组建一个大型乐队,实现您一人操纵百人乐队的梦想;对于乐队的编辑和音符修改也异常方便,如同MS WORD 进行文字处理一样简便。在输出方面能打印总谱,分谱,也可以打印其中所需的部分乐谱。
“乐音”软件是通力公司的自主软件之一,它的开发,历时3年多的时间,在开发伊始,通力公司以独特的前瞻性眼光发现国产音乐类软件缺乏,已有的几种在功能和操作上都存在这样那样的不足,主要是个别国外软件唱主角,并且计算机辅助音乐教学(CAI)也缺乏一个平台。针对这样一种情况,通力公司投入大量的人力,物力目标开发一个即可满足广大音乐爱好者编辑MIDI音乐,也可作为音乐教学平台的软件,这就是“乐音3.0”
以下是乐音软件的六大特点:
特点一:简洁的操作界面。
特点二:乐音3.0软件具有多达100个音轨的分谱编辑功能,有128种不同的音色供选择。
特点三:乐音3.0具有许多同类软件都没有的一大功能,那就是支持五线谱、简谱两种作曲方式,
特点四:乐音软件可以根据实际和个人喜好提供多种谱曲方法:
特点五:提供方便实用、功能强大、高品质的乐谱打印功能。
特点六:独有tri文件格式,可保存MIDI文件所不能保存的歌词、特殊音乐符号等信息,兼容标准的MIDI格式0、格式1。
乐音3.0软件同时还具备邮件发送功能,可以让乐谱,MIDI音乐通过INTERNET自由的交换,通力公司正着手开发基于web版本,而即将开通的乐音网站,也将为广大乐音使用者提供一个广阔的音乐空间!
作曲大师
作曲大师软件界面
作曲大师是一个持续开发了十年的国产音乐软件,它界面友好,直观易用而又功能强大的,它支持128种
音色和16声部交响乐的编辑,拥有最强大的简谱诠释能力,包括演奏非常复杂的反复记号和跳房子记号和鼓谱,是唯一一套可为您原样演奏市面歌本上大多数曲目的简谱软件,让不识简谱和五线谱的人立即识谱,迈入音乐殿堂,并可读取和输出MIDI文件,可处理多少声部混排的合唱谱、输出GIF、矢量EPS等乐谱图片格式插入到word、coreldraw中方便乐理试卷、专业音乐书籍的编辑排版。拥有最完善的乐谱输入和编辑能力,拥有五种输入方式,两套完善的复制粘贴和6种插入删除操作,数量众多的民乐和西洋符号库。在戏曲、民乐、教学、创作、排版等方面填补了国内外多项空白,可满足音乐创作、音乐教学和音乐排版等多方面的需要。 推出的2005五线谱版相对2000年的2000版拥有重大改进近40项,是国内第一个专业级五线谱软件,它建立在广受欢迎的作曲大师简谱版V5.0的基础上,除拥有等众多简谱已有的功能外,更支持五线鼓谱、从任意行开始演奏及加速和减速、完美的可调节角度的连线、向导等专业功能,在歌词处理、民乐符号处理方面为国人处理五线谱扫清了障碍。 就来免费下载作曲大师简谱和五线谱软件吧,我们的主页作曲网上您还可以下载网友上传的近2000多首简谱和五线谱乐曲,让每一个家庭都来学唱歌曲和提高音乐素养,让孩子无形之中就学会了简谱和五线谱,成为未来的明星。它更可帮助有歌星梦的人学习识谱以便真正登堂入室,以及音乐培训班、流行歌曲及其它专业音乐创作,民族乐器和各种戏曲乐谱的编排,音乐老师做课件、出乐理试卷和开展电脑辅助教学,歌本和简谱音乐书籍的基础排版。
悠悠虚拟乐队
悠悠虚拟乐队(YOUBAND),是一款非常便捷的作曲编曲软件,即使毫无音乐基础的外行也可轻松创作音乐作品。只需用户鼠标点击几下,软件即可自动生成出的歌曲。若用户输入歌词,软件还可自动完成作曲和编曲工作,并由虚拟歌手来演唱,虚拟乐队来伴奏。主要有如下功能:
1. 采用歌声合成技术和自动作曲技术的智能编曲软件。
2. 选择曲风,一秒钟自动生成音乐;
3. 输入歌词,自动生成旋律+伴奏;
4. 输入主旋律,自动生成伴奏;
5. 生成歌曲由虚拟歌手演唱,虚拟乐队伴奏。
6. 支持用户制作自己的虚拟歌手音源库。
7. 歌曲可以导出midi或wave格式的文件,方便用其他音乐软件加工。
悠悠虚拟乐队软件界面简洁,操作简单,是一款不折不扣的“傻瓜”软件。能让广大音乐初学者轻松享受到专业级的音乐服务。即使是专业音乐人也可以从中获取灵感,同时也可方便地应用于音乐教学实践。