/**
头部声明区 | 数据长度声明区 | 数据位
ASCII M ASCII T ASCII h ASCII d | Data Length: 6 | MIDI type: 1 | Track Count: 1 | Division: mode0, 120 ticsks/second
01010100 01101000 01100100 00000000 00000000 00000000 00000110 00000000 00000001 00000000 00000001 00000000 11110000
*/
首部块内容如上所示,用于声明一条音序的基本信息,仅用于标注文件声明。其中,4字节ASCII数据“MThd”为Header Chunk标识位,data length值为当前Chunk中数据位的长度。数据位包括3部分内容:
/**
|H|8-14bit 0-7bit
000 00000000
*/
如上结构的2字节数据位,这是个麻烦的字段。节拍有两种表示方式,取决于字段最高位(H位置处)数据:
/**
头部声明区 | 数据长度声明区 | 数据区 | 结束标记
ASCII M ASCII T ASCII r ASCII k | Data Length: unknown | OOXX.... | Ending the track: FF 2F 00
01010100 01110010 01101011 | OOOOOOOO XXXXXXXX OOOOOOOO XXXXXXXX | OOOOOOOO XXXXXXXX | 11111111 00101111 00000000
*/
音轨是一系列数据的集合,每条音轨以声明ASCII“MTrk”开始。音轨是一个完全不受限制的数据定义区域,其中记录乐谱各种信息,包含但不仅限于:版权声明、文本信息、开启/关闭声音(
Note On/Note Off
)、改变乐器(
Program Change
)等等。MTrk类型Chunk必须有
结束标记
,并且结束标记也应当计算入数据区总长度。
/**
* 一则简单版权声明事件
*
时间戳 | MIDI消息体
Tick | Message Type | Length | Message Data
11111111 00000010 00000010 01000110 01000101
*/
简言之,存储于Track数据区的所有内容均为一则
事件
,其结构如前文所示,主要包含两部分内容,
时间戳
和
MIDI消息
。事件是Track内容的基本组成单元,拥有时间戳是其固有属性。一则正确定义的事件将按照节拍的与定义方式(Header Chunk中的division)在合适的时间被合成器触发,并产生相应的效果。
/**
:
*/
对于超过127的数据,可变长度数需要扩展高位字节,并遵循如下规则:
/**
:
- 普通二进制:
- 可变长度数:
01111111
- 普通二进制:
11111111
- 可变长度数:
01111111
- 普通二进制:
00000000
- 可变长度数:
10000000 00000000
*/
/**
* 一则简单版权声明事件内的消息体
*
Meta消息
消息类型: FF 02 | Length:2 | ASCII: F ASCII: E
00000010 00000010 01000110 01000101
*/
上图所示的消息类型为“FF 02”,标准中定义其为“版权声明”。比较重要的Meta消息类型有“版权声明”(FF 02)和Track结束标记(FF 2F 00),在任何音序中都会存在。
/**
* 系统专用信息结构
*
Meta消息
消息类型 | 0iiiiiii | 任意数据 | 结束标记
00000100 10010000 01111111 01111111 11110111
*/
一个系统专用信息如果以“F0”开始,则必须以“F7”作为结尾。因此,“F7”也被称作“End of Exclusive (EOX)”。
/**
* F0-F7承载命令示例(16进制)
*
// start from tick 0
F0 03 43 12 00 // start from F0
// 200-tick delta time
F7 06 43 12 00 43 12 00 // F7 as an escape
// 100-tick delta time
F7 04 43 12 00 F7 // F7 as an escape
// together with the end of F0 while EOX is count into the last escape.
*/
并且“F7”本身也可以作为独立消息使用:
/**
* F7作为escape使用
// start from tick 0
F7 01 FC // short message FC - pause
// 48-tick dalta time
F7 01 FB // FB - start
*/
关于该类型消息的更多解释,还可 点击此处参考更详细的字段拆解
。
/**
* 通道消息标准格式
*
类型和通道 | 数据1 数据2
ttt cccc 0xxxxxxx 0yyyyyyy
0000 01111111 01111111
*/
好吧,怀旧一下。Short Message其实是Java中的叫法,Java把控制消息和通道消息全部合并称为短消息。
/**
* 以最大力度在 Channel 0 按下C大调,并在持续240个tick单位后松开
* C大调为从0到127号中的第60号,0x3C;中调64号为第四音阶E调,0x40。
* GS波表软件合成器中每1/4个音符持续0.5秒,故该Note共持续5秒。
*
10010000 00111100 01111111
01110000 10000000 00111100 01111111
*/
点此下载《24tick/秒的 Piano MIDI 样例》。/**
* 切换 Channel 0 当前默认乐器“0-Piano”为“17-Percussive”;
* 以最大力度在 Channel 0 按下C大调,并在持续240个tick单位后松开;
*
11000000 00010001
10010000 00111100 01111111
01110000 10000000 00111100 01111111
*/
点此下载《24tick/秒的 Percussive MIDI 样例》。/**
* 以最大力度在 Channel 0 按下C大调,并在240个tick单位内让声音渐变至消失
* 每个事件之间的tick间隔为1,
* 约每2个tick单位压力降低1
*
11000000 00010001 // Program Change
10010000 00111100 01111111 // Note On
10100000 00111100 01111111 // PolyKey Pressure
10100000 00111100 01111110
10100000 00111100 01111110
... // 剩余237个触后键力度调整
10100000 00111100 00000000
10000000 00111100 00111111 // Note Off
*/
需要注意的是,部分音色(经典例如钢琴)在一个时间足够长的 Note On 和 Note Off 之间,也即在该音调完整播放时本身就有音量衰减。甚至对于钢琴而言,标准音色在 Note Off 时声音并不会立即消失,而是以更快的速度将力度渐变至0。这是为了还原此类音色在真实乐器上的演奏效果,当然也存在多数音色将始终在 Note On 和 Note Off 之间保持同一播放效果。大部分合成器均能正确根据音色库的定义表现这些音色的特效,然而对于预先录制为.mp3格式的音色库而言,模拟的合成器对在 Note Off 上的处理将会变得相当尖锐和突兀。看看名噪一时的Color Piano,试着弹几个键就知道我在说什么了。这时合成器应当能够主动为特定音色添加触后量变化消息,以实现渐变的延音效果。/**
* 以最大力度在 Channel 0 按下C大调,并在240个tick单位内让声音渐变至消失
* 使用11号-力度控制器替代触后键力度实现渐变
* 在第2.5秒单位时为音符添加最大力度颤音
*
11000000 00010001 // Program Change
10010000 00111100 01111111 // Note On
10110000 00001011 01111111 // 0xB0 0x11 0x7F - 11号控制器
10110000 00001011 01111111
10110000 00001011 01111110
... // 中间117个11号控制器
10110000 00000001 01111111 // 0xB0 0x01 0x7F - 1号控制器,120tick时最大力度颤音
... // 中间120个11号控制器
10110000 00001011 00000000 // 0xB0 0x11 0x00 - 11号控制器最小力度
10000000 00111100 00111111 // Note Off
*/
点此下载《24tick/秒的 Percussive 颤音渐弱样例》/**
* 以最大力度在 Channel 0 按下C大调,并在240个tick单位内让声音渐变至消失
* 在第2.5秒单位时为音符添加最大力度颤音
* 在 240 tick 内,仅使用粗调将音符提升一个音阶
* 约每3个tick单位音调提升1
*
11000000 00010001 // Program Change
10010000 00111100 01111111 // Note On
10110000 00001011 01111111 // 0xB0 0x11 0x7F - 11号控制器
11100000 00000000 01000000 // 0xE0 0x00 0x40 - 音调轮中值
10110000 00001011 01111111
11100000 00000000 01000000
10110000 00001011 01111110
11100000 00000000 01000001 // 0xE0 0x00 0x41
... // 117个11号控制器和音调轮变化
10110000 00000001 01111111 // 0xB0 0x01 0x7F - 1号控制器,120tick时最大力度颤音
... // 120个11号控制器和音调轮变化
10110000 00001011 00000000 // 0xB0 0x11 0x00 - 11号控制器最小力度
11100000 00000000 01111111 // 0xE0 0x00 0x7F - 音调最高偏移
10000000 00111100 00111111 // Note Off
*/
点此下载《24tick/秒的 Mono 模式 Channel 0 下 Percussive 颤音渐弱音调渐变样例》,或者看看残忍之快速的巨神之刃放松放松。/**
* 完整版“残忍之快速的巨神之刃”
*
01010100 01101000 01100100 // MThd
00000000 00000000 00000110 // header lentgh: 6 bytes
00000001 // Midi Type: 1
00000001 // Track count: 1
00011000 // Division: 48 ticks / second
01010100 01110010 01101011 // MTrk
00000000 00000111 10111011 // Track Length: 955 bytes - length-fixable data
11111111 00000010 00011100 // tick 0, 0xFF 0x02 0x1C - CopyRight, length: 28 bytes
01100011 00101001 00110010 // CopyRight Contents in 28 bytes.
00110001 00110011 00100000
01111001 00100000 01111001
01110010 01101101 01111001
01110010 01100011 01101000
01101100 01101001 01110110
00101110 01100011 01101110
11000000 00010001 // Program Change
10010000 00111100 01111111 // Note On
10110000 00001011 01111111 // 0xB0 0x11 0x7F
11100000 00000000 01000000 // 0xE0 0x00 0x40
10110000 00001011 01111111
11100000 00000000 01000000
10110000 00001011 01111110
11100000 00000000 01000001 // 0xE0 0x00 0x41
// 117 No.11 Controller
10110000 00000001 01111111 // 0xB0 0x01 0x7F
// 120 No.11 Controller
10110000 00001011 00000000 // 0xB0 0x11 0x00
11100000 00000000 01111111 // 0xE0 0x00 0x7F
10000000 00111100 00111111 // Note Off
11111111 00101111 00000000 // tick 0, 0xFF 0x2F 0x00 - End of Track Chunk
*/
有兴趣的同僚们可以用二进制文件编辑器,例如UltraEditor之类的打开《残忍之轻快的巨神之刃》,对照以上二进制数据。如果发现有些不一样的地方——不要在意那些细节啦——这文件打开之后看起来大概像这样:
var dataString = "", // contents of the midi given above
dataArray = dataString.split(/\D/).map(function(str) {
return parseInt(str, 2);
}),
blob = new Blob([new Uint8Array(dataArray)], {
type:"audio/midi"});
有了Blob事情就好办多了,该文件在内存中创建完毕,已经可以通过DataUrl提供访问了。设想我们让用户点击直接下载:
var url = URL.createObjectURL(blob);
document.body.onclick = function() {
window.open(url);
document.body.onclick = "";
}
/**
* key: tick count from the start of the sequence.
* value: msgArr {Array} messages that're sharing the same tick which should
* be contributed by type and data, and they could be serialized.
*/
events = {
: [
x903F7F,
// other messages in tick 0
],
: [
x803F7F,
// other messages in tick 120
]
}
var seq = new Midi.Sequence(1, 24),
track = seq.getTrack(0);
track.addEvent(0, new Midi.Message(0xc0, 0x11)); // Program Change to No.17
track.addEvent(0, new Midi.Message(0xB0, [124,0])); // omni on
track.addEvent(0, new Midi.Message(0xB0, [126,1])); // mono on & omni on
track.addEvent(0, new Midi.Message(0x90, [60,127])); // Note On Key 0x3C
track.addEvent(120, new Midi.Message(0xB0, [1,127])); // Vibrato Controller
track.addEvent(240, new Midi.Message(0x80, [60,127])); // Note Off
// Apply Voice Change and Pitch Wheel Change
for (var i = 1; i <= 240; ++i) {
track.addEvent(i, new Midi.Message(0xB0, [11, 127 - ~~((127 / 240) * i)]));
track.addEvent(i, new Midi.Message(0xE0, [0, 64 + ~~((63 / 240) * i)]));
}
// Click & Download
var blob = new Blob([seq.toByteArray(1)], {
type:"audio/midi"});
var url = URL.createObjectURL(blob);
document.body.onclick = function() {
window.open(url);
document.body.onclick = "";
}
你也可以 到这里来现场玩一玩
,或者 点击这里查看源码
。
谢谢观赏,后会有期。
http://ju.outofmemory.cn/entry/79263
http://yarmyarch.com/archives/141
钢琴 |
||
0 |
Acoustic Grand Piano |
大钢琴(声学钢琴) |
1 |
Bright Acoustic Piano |
明亮的钢琴 |
2 |
Electric Grand Piano |
电钢琴 |
3 |
Honky-tonk Piano |
酒吧钢琴 |
4 |
Rhodes Piano |
柔和的电钢琴 |
5 |
Chorused Piano |
加合唱效果的电钢琴 |
6 |
Harpsichord |
羽管键琴(拨弦古钢琴) |
7 |
Clavichord |
科拉维科特琴(击弦古钢琴) |
色彩打击乐 |
||
8 |
Celesta |
钢片琴 |
9 |
Glockenspiel |
钟琴 |
10 |
Music box |
八音盒 |
11 |
Percussive |
颤音琴 |
12 |
Marimba |
马林巴 |
13 |
Xylophone |
木琴 |
14 |
Tubular Bells |
管钟 |
15 |
Dulcimer |
大扬琴 |
风琴 |
||
16 |
Hammond Organ |
击杆风琴 |
17 |
Percussive Organ |
打击式风琴 |
18 |
Rock Organ |
摇滚风琴 |
19 |
Church Organ |
教堂风琴 |
20 |
Reed Organ |
簧管风琴 |
21 |
Accordian |
手风琴 |
22 |
Harmonica |
口琴 |
23 |
Tango Accordian |
探戈手风琴 |
吉他 |
||
24 |
Acoustic Guitar (nylon) |
尼龙弦吉他 |
25 |
Acoustic Guitar (steel) |
钢弦吉他 |
26 |
Electric Guitar (jazz) |
爵士电吉他 |
27 |
Electric Guitar (clean) |
清音电吉他 |
28 |
Electric Guitar (muted) |
闷音电吉他 |
29 |
Overdriven Guitar |
加驱动效果的电吉他 |
30 |
Distortion Guitar |
加失真效果的电吉他 |
31 |
Guitar Harmonics |
吉他和音 |
贝司 |
||
32 |
Acoustic Bass |
大贝司(声学贝司) |
33 |
Electric Bass(finger) |
电贝司(指弹) |
34 |
Electric Bass (pick) |
电贝司(拨片) |
35 |
Fretless Bass |
无品贝司 |
36 |
Slap Bass 1 |
掌击Bass 1 |
37 |
Slap Bass 2 |
掌击Bass 2 |
38 |
Synth Bass 1 |
电子合成Bass 1 |
39 |
Synth Bass 2 |
电子合成Bass 2 |
弦乐 |
||
40 |
Violin |
小提琴 |
41 |
Viola |
中提琴 |
42 |
Cello |
大提琴 |
43 |
Contrabass |
低音大提琴 |
44 |
Tremolo Strings |
弦乐群颤音音色 |
45 |
Pizzicato Strings |
弦乐群拨弦音色 |
46 |
Orchestral Harp |
竖琴 |
47 |
Timpani |
定音鼓 |
合奏/合唱 |
||
48 |
String Ensemble 1 |
弦乐合奏音色1 |
49 |
String Ensemble 2 |
弦乐合奏音色2 |
50 |
Synth Strings 1 |
合成弦乐合奏音色1 |
51 |
Synth Strings 2 |
合成弦乐合奏音色2 |
52 |
Choir Aahs |
人声合唱“啊” |
53 |
Voice Oohs |
人声“嘟” |
54 |
Synth Voice |
合成人声 |
55 |
Orchestra Hit |
管弦乐敲击齐奏 |
铜管 |
||
56 |
Trumpet |
小号 |
57 |
Trombone |
长号 |
58 |
Tuba |
大号 |
59 |
Muted Trumpet |
加弱音器小号 |
60 |
French Horn |
法国号(圆号) |
61 |
Brass Section |
铜管组(铜管乐器合奏音色) |
62 |
Synth Brass 1 |
合成铜管音色1 |
63 |
Synth Brass 2 |
合成铜管音色2 |
簧管 |
||
64 |
Soprano Sax |
高音萨克斯风 |
65 |
Alto Sax |
次中音萨克斯风 |
66 |
Tenor Sax |
中音萨克斯风 |
67 |
Baritone Sax |
低音萨克斯风 |
68 |
Oboe |
双簧管 |
69 |
English Horn |
英国管 |
70 |
Bassoon |
巴松(大管) |
71 |
Clarinet |
单簧管(黑管) |
笛 |
|
|
72 |
Piccolo |
短笛 |
73 |
Flute |
长笛 |
74 |
Recorder |
竖笛 |
75 |
Pan Flute |
排箫 |
76 |
Bottle Blow |
[中文名称暂缺] |
77 |
Shakuhachi |
日本尺八 |
78 |
Whistle |
口哨声 |
79 |
Ocarina |
奥卡雷那 |
合成主音 |
||
80 |
Lead 1 (square) |
合成主音1(方波) |
81 |
Lead 2 (sawtooth) |
合成主音2(锯齿波) |
82 |
Lead 3 (caliope lead) |
合成主音3 |
83 |
Lead 4 (chiff lead) |
合成主音4 |
84 |
Lead 5 (charang) |
合成主音5 |
85 |
Lead 6 (voice) |
合成主音6(人声) |
86 |
Lead 7 (fifths) |
合成主音7(平行五度) |
87 |
Lead 8 (bass+lead) |
合成主音8(贝司加主音) |
合成音色 |
||
88 |
Pad 1 (new age) |
合成音色1(新世纪) |
89 |
Pad 2 (warm) |
合成音色2 (温暖) |
90 |
Pad 3 (polysynth) |
合成音色3 |
91 |
Pad 4 (choir) |
合成音色4 (合唱) |
92 |
Pad 5 (bowed) |
合成音色5 |
93 |
Pad 6 (metallic) |
合成音色6 (金属声) |
94 |
Pad 7 (halo) |
合成音色7 (光环) |
95 |
Pad 8 (sweep) |
合成音色8 |
合成效果 |
||
96 |
FX 1 (rain) |
合成效果 1 雨声 |
97 |
FX 2 (soundtrack) |
合成效果 2 音轨 |
98 |
FX 3 (crystal) |
合成效果 3 水晶 |
99 |
FX 4 (atmosphere) |
合成效果 4 大气 |
100 |
FX 5 (brightness) |
合成效果 5 明亮 |
101 |
FX 6 (goblins) |
合成效果 6 鬼怪 |
102 |
FX 7 (echoes) |
合成效果 7 回声 |
103 |
FX 8 (sci-fi) |
合成效果 8 科幻 |
民间乐器 |
||
104 |
Sitar |
西塔尔(印度) |
105 |
Banjo |
班卓琴(美洲) |
106 |
Shamisen |
三昧线(日本) |
107 |
Koto |
十三弦筝(日本) |
108 |
Kalimba |
卡林巴 |
109 |
Bagpipe |
风笛 |
110 |
Fiddle |
民族提琴 |
111 |
Shanai |
山奈 |
打击乐器 |
||
112 |
Tinkle Bell |
叮当铃 |
113 |
Agogo |
[中文名称暂缺] |
114 |
Steel Drums |
钢鼓 |
115 |
Woodblock |
木鱼 |
116 |
Taiko Drum |
太鼓 |
117 |
Melodic Tom |
通通鼓 |
118 |
Synth Drum |
合成鼓 |
119 |
Reverse Cymbal |
铜钹 |
声音效果 |
||
120 |
Guitar Fret Noise |
吉他换把杂音 |
121 |
Breath Noise |
呼吸声 |
122 |
Seashore |
海浪声 |
123 |
Bird Tweet |
鸟鸣 |
124 |
Telephone Ring |
电话铃 |
125 |
Helicopter |
直升机 |
126 |
Applause |
鼓掌声 |
127 |
Gunshot |
枪声 |
Meta Message |
||
FF 00 02 ss ss |
音序号 |
|
这是一个可选的事件,它只能产生在第一个track,并且在非零时刻之前。 格式2文件中,这个用来识别每个 track,如果忽略,这个序列号从而用 track 出现的次序表示。. 格式1文件中,这个事件只能产生在第一个 track。 |
||
ss ss |
音序号,16 bit 二进制数。 |
|
FF 01 <长度> <数据> |
文本事件 |
|
这个事件是用来注释 track 的文本。 |
||
<长度> |
<文本> 的长度(可变长度数) |
|
<文本> |
<长度>个字节的 ASCII 文本或8位二进制数 |
|
FF 02 <长度> <数据> |
版权声明 |
|
这个事件是用ASCII文本表示的版权通告, 若要使用该事件,其必须为第一个track的第一个事件。 |
||
FF 03<长度> <数据> |
音序 / Track 名称 |
|
音序或 track 的名称,同样由可变长度数与ASCII数据组成。 |
||
FF 04 <长度> <数据> |
乐器名称 |
|
这个用来详细的记述(这个) MIDI channel 在 (这个)track 里使用的乐器。注意该事件并不会真正影响Channel中的音频流。如果希望改变当前Channel中的乐器(而非仅仅标注),请使用Program Change。 |
||
FF 05 <长度> <数据> |
歌词 |
|
通常每个音节都有自己的歌词,MIDI中允许将ASCII歌词嵌入乐谱作为消息并加上时间戳,交由合成器解释。 |
||
FF 06 <长度> <数据> |
标记 |
|
通常用于格式0或格式1的第一个 track 。 |
||
FF 07<长度> <数据> |
暗示 |
|
用来表示舞台上发生的事情。如:“幕布升起”、“退出,台左”等。 |
||
FF 20 01 cc |
MIDI Channel 前缀 |
|
关联紧跟的 所有meta-events 或 sysex-events 的 MIDI channel,直到出现下一个包含Channel信息的标准消息出现。 |
||
cc |
MIDI channel 1-16 |
|
FF 2F 00 |
Track 结束标记 |
|
这个事件是必须的,并且时间戳刻度应当在所有其他事件之后。 |
||
FF 51 03 tt tt tt |
拍子 |
|
这个标注1/4音符的速度,用微秒表示。这个意味着改变一个 delta-time 的单位长度。 (注意1) 如果没有指出,缺省的速度为 120拍/分。这个相当于 tttttt = 500,000。 |
||
FF 54 05 hh mm ss fr ff |
SMTPE 偏移量 |
|
可选事件,描述 track 开始时的 SMTPE 时间。 这个事件必须发生在非零 delta-time之前,且在第一个事件之前。 在格式1中,这个事件必须在第一个 track 中。 |
||
hh mm ss fr |
小时/分/秒/帧 用 SMTPE 格式。 |
|
ff |
Fractional frame, in hundreth's of a frame |
|
FF 58 04 nn dd cc bb |
拍子记号 |
|
拍子记号的形式: nn/2^dd 这个参数 cc 是表示每个 MIDI 时钟的节拍器的 tick 数目。 通常24 个 MIDI 时钟为一个1/4音符。可是一些软件允许用户自己设置这个值。参数 bb 定义:24 MIDI 时钟(这个“一般”(表示)1/4音符)中 1/32音符的数目。 |
||
nn |
拍子记号,分子 |
|
dd |
拍子记号,分母表示为 2 的(dd次)冥。 |
|
cc |
每个 MIDI 时钟节拍器的 tick 数目。 |
|
bb |
24个MIDI时钟中1/32音符的数目(8是标准的)。 |
|
FF 59 02 sf mi |
音调符号 |
|
音调符号,表示升调或降调值,大调或小调的标志。 0 表示 C 调,负数表示“降调”,正数表示“升调”。 |
||
sf |
升调或降调值 |
|
mi |
0 = 大调 |
|
FF 7F |
音序器描述 Meta-event |
|
这个在 MIDI 文件中等同于系统高级事件。 在 MIDI 文件中用这个事件表示制造商音序器统一化的描述。 |
||
<长度> |
长度 of |
|
|
1或3个字节表示制造厂商。 |
|
<数据 > |
8位二进制数 |
系统通用消息(System Common Message) |
||
状态位(D7-D0) |
数据位(D7-D0) |
信息含义 |
11110000 |
0iiiiiii |
专用系统消息 |
0ddddddd |
见前文中关于“SysexMessage”的描述。 |
|
11110001 |
/ |
MIDI时间代码转换信息 |
11110010 |
0lllllll |
乐曲位置指针信息 |
0mmmmmmm |
这个信息是一个内部十四位寄存器存储了从乐曲开始计数时的MIDI的节拍数(在MIDI协议中,一节拍相当于六个MIDI时钟单位) |
|
11110011 |
0sssssss |
乐曲选择信息 |
该信息指定了以什么序列或哪首乐曲将被演奏。 |
||
11110100 |
/ |
未定义 |
11110101 |
/ |
未定义 |
11110110 |
/ |
音调调整要求信息 |
当模拟合成器收到这个信息时,都要调整它们的震荡器的震荡频率,这个信息是为老式的电子合成器而保存的.因为在老式的合成器的使用时常常发生音调不准,需要此信息对其进行震荡器的微调.而今天的合成器已经不需要它了。 |
||
11110111 |
/ |
结束系统专用信息 |
系统实时消息(System Real-Time Message) |
||
状态位(D7-D0) |
数据位(D7-D0) |
信息含义 |
11111000 |
/ |
时钟信息 |
当有同步要求时,该信息每四分之一音符发送24次。 |
||
11111001 |
/ |
未定义 |
11111010 |
/ |
开始信息 |
开始现有的序列演奏(通常时钟信息紧跟在本信息后面连用)。 |
||
11111011 |
/ |
继续信息 |
本信息是命令音序在被停止的地方继续演奏。 |
||
11111100 |
/ |
停止信息 |
停止/暂停当前音序,可被恢复。 |
||
11111101 |
/ |
未定义 |
11111110 |
/ |
联系激活信息 |
这条信息的使用是可以选择的。如果使用了该信息,接收器将在每300(最大值)毫秒内准备接收下一个联系激活信息,否则它会自动认为连接已经终止。如果接收器认为连接已经终止后,它将停止所有发音并恢复到正常的工作状态(非联系激活工作状态)。 |
||
11111111 |
/ |
复位信息 |
复位信息将系统内所有接收器都恢复到电源打开的初始状态。在一些特殊状态下,它可以不复位到电源打开状态下。 |
通道声音信息(Channal Voice Message) |
|||
状态位(D7-D0) |
数据位(D7-D0) |
信息含义 |
|
1000cccc |
Onnnnnnn |
音符关闭 |
|
Ovvvvvvv |
这个信息是在一个音结束时发出的,如键盘的某个键被放开 |
||
1001cccc |
Onnnnnnn |
音符打开 |
|
Ovvvvvvv |
这个信息是在一个音开始时发出的,如键盘的某个键被按下,其中(nnnnnn)是音符音高的编号代码,C大调音高为“01100000”;(vvvvvvv)是力度的编号代码。 |
||
1010cccc |
Onnnnnnn |
和弦(触后)键压力变化 |
|
Ovvvvvvv |
这个信息是在先前被按下的琴键的压力变化时发出的,其中(nnnnnnn)是音符的编号代码,(vvvvvvv)是变化后新力度的编号代码。 |
||
1011cccc |
0ccccccc |
控制器变化 |
|
0vvvvvvv |
这个信息是在某个控制器的控制值发生变化时发出的,例如:踏板等变化 |
||
1100cccc |
0ppppppp |
程序变化(乐器切换) |
|
这个信息是在音色号码被改变时发出的,其中(ppppppp)是新的音色号码。GM标准音色号可在附录一中查询。 |
|||
1101nnnn |
0ccccccc |
通道(触后)压力变化 |
|
这个信息是在通道的压力发生变化时发出的,当有一些对力度敏感的键盘不支持上文中提到的和弦触后(Polyphonic Aftertouch)时,可以通过发送这个信息来改变当前所有被按下的键中力度最大的单个键的力度信息,其中(ccccccc)是控制代码。 |
|||
1110nnnn |
0lllllll |
(触后)音调轮变化 |
|
0mmmmmmm |
这个信息的发送说明音调轮有变化 |
||
通道模式信息(Channel Mode Message) |
|||
1011nnnn |
0ccccccc |
通道模式信息 |
|
0vvvvvvv |
通道模式消息是“控制器消息”中的特殊情况,特定的控制器类型被作为保留字段识别为该类型信息。 通道模式
所有音符关闭: |
MIDI控制器一览表 |
|
控制器编号 |
参数意义 |
0 |
音色库选择MSB |
1 |
颤音深度(粗调) |
2 |
呼吸(吹管)控制器(粗调) |
3 |
N/A |
4 |
踏板控制器(粗调) |
5 |
连滑音速度(粗调) |
6 |
高位元组数据输入(Data Entry MSB) |
7 |
主音量(粗调) |
8 |
平衡控制(粗调) |
9 |
N/A |
10 |
声像调整(粗调) |
11 |
力度控制器(粗调) |
12-15 |
N/A |
16-19 |
一般控制器 |
20-31 |
N/A |
32 |
插口选择 |
33 |
颤音速度(微调) |
34 |
呼吸(吹管)控制器(微调) |
35 |
N/A |
36 |
踏板控制器(微调) |
37 |
连滑音速度(微调) |
38 |
低位元组数据输入(Data Entry LSB) |
39 |
主音量(微调) |
40 |
平衡控制(微调) |
41 |
N/A |
42 |
声像调整(微调) |
43 |
力度控制器(微调) |
44 |
效果FX控制1(微调) |
45 |
效果FX控制2(微调) |
46-63 |
N/A |
64 |
保持音踏板1(延音踏板) |
65 |
滑音(在音头前加入上或下滑音做装饰音) |
66 |
持续音 |
67 |
弱音踏板 |
68 |
连滑音踏板控制器 |
69 |
保持音踏板2 |
70 |
变调 |
71 |
音色 |
72 |
放音时值 |
73 |
起音时值 |
74 |
亮音 |
75-79 |
声音控制 |
80-83 |
一般控制器(#5-#8) |
84 |
连滑音控制 |
85-90 |
N/A |
91 |
混响效果深度 |
92 |
(未定义的效果深度) |
93 |
合唱效果深度 |
94 |
(未定义的效果深度) |
95 |
移调器深度 |
96 |
数据累增 |
97 |
数据递减 |
98 |
未登记的低元组数值(NRPN LSB) |
99 |
未登记的高元组数值(NRPN MSB) |
100 |
已登记的低元组数值(RPN LSB) |
101 |
已登记的高元组数值(RPN MSB) |
102-119 |
N/A |
120 |
关闭所有声音 |
121 |
关闭所有控制器 |
122 |
本地键盘开关 |
123 |
关闭所有音符 |
124 |
Omni模式关闭 |
125 |
Omni模式开启 |
126 |
单音模式 |
127 |
复音模式 |
音阶# |
Note Keys |
|||||||||||
|
C |
C# |
D |
D# |
E |
F |
F# |
G |
G# |
A |
A# |
B |
-1 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
0 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
1 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
2 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
3 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
4 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
5 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
6 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
7 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
8 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
9 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
|
|
|
|