Logo 象的主页 zh en
相册 日记 文章 礼物  
MIDI 编辑器


 
  • txt mid Johann Pachelbel - Canon(感谢 icy 输入乐谱)
  • txt mid Johann Sebastian Bach - Minuet
  • txt mid Johann Sebastian Bach - Invention 14th
  • txt mid Johann Sebastian Bach - Preludio
  • txt mid John Rutter - For the Beauty of the Earth

MIDI 编辑器的输入文本由多个短语构成,短语之间由空格(包括空格、制表符、换行)或者 小节线“|”分隔。每个短语具有一定的格式,表示一个或多个音符,或者某个 MIDI 控制信息。

音符短语

音符短语由 [音符][音长] 构成。[音符] 中,以 1234567 0 或者 CDEFGAB P 代表键盘上的七个音阶和休止符,在数字或者字母前面加 - 或 + 表示低八度或者高八度的音阶,前面加 ! # 或 % 表示降、升或者还原半音(关于还原记号请见“音符偏移短语”)。[音符] 后面紧接着 [音长] 记号,以 . 表示音长加半,/ 表示音长减半,\ 表示音长乘以 1/3(用于三连音),- 表示音长增加一个四分音符。 如果没有 [音长] 记号,音长为四分音符。归纳如下:

音符前缀音长
-降低八度.音长加半
+升高八度/音长减半
!降低半音\音长乘以 1/3
#升高半音- 音长增加一个四分音符
%还原半音

一些例子以及更复杂的写法(请注意空格):

+#4/. 0// 高音升 fa 音长为 3/16 音符,休止符音长为 1/16 音符
5 1/ 2/ 3/ 4/ 5 1 1巴赫《小步舞曲》
5 1234/ 511同上,音长相同的音符可以连写
(135) (-613)大、小三和弦,同时弹奏的音符以小括号括起来
(135)(246)(357)(46+1)以上两种写法的综合
1~3~5~ (135+1)~ 表示连音线,直到后面出现相同音符(且没有更多连音线)才停止
[52]第 52 号音符,通常用于 9 号通道的打击乐器

非音符短语

下面是一些非音符短语的格式说明(其中 N 代表十进制数字,小括号中的内容可以略写):

初始值
$N0选择通道(声部),N=0~15,其中 N=9 为打击乐器通道
I(nstrument)=N0选择乐器,N=0~127
S(ignature)=N/N2/4设定拍子记号,一般可以是 2/4 3/4 4/4 3/8 6/8 等
T(empo)=N750000设定速度,每个四分音符 N 微秒
V(olume)=N127设定通道音量,N=0~127
P(osition)=N64 设定通道位置,N=0~127,0 表示最左端,127 表示最右端
//单行注释,从 // 到行末的任何字符均被忽略
/*多行注释开始,从 /* 到 */ 的任何字符均被忽略
*/多行注释结束

音符偏移短语

如果乐谱中的某段音符偏高、偏低或者变调,可以考虑采用音符偏移短语简化乐谱的书写。 例如 ++1 ++2 ++3 ++4 可以写为 ++ 1 2 3 4,其中 ++ 表示以后的所有音符都升高两个八度。 音符偏移短语的格式说明(注意 1~7 与 C~B 等价):

初始值
-降低八度,允许多个连写
+升高八度,允许多个连写
1(C)=N60 将 1(C) 设为指定音高 N,N=10~127,音高以半音为单位
1(C)=音符 将 1(C) 设为音符所代表的音高,音符所代表的音高以最后一次 1(C)=N 为基准
1..7(C..B)变音记号1234567% 从此以后的所有对应音符都降低、升高或还原半音

需要说明的是,跟音符前缀只修饰它后面紧跟的音符不同,音符偏移短语的作用范围都是长程的。 如果某个音符处于长程升、降记号的作用之中,要想临时取消升、降半音,可以在音符前缀中使用还原记号。 举些例子,下列各行的演奏结果是相同的:

C=60 1234567+1      567+1+2+3+#4+5      +1+2+3+4+5+6+7++1
C=60 1234567+1 C=G  1234567+1      C=+C 1234567+1
C=60 1234567+1 C=67 1234567+1      C=F  1234567+1
C=60 1234567+1      567+1+2+3+#4+5 +    1234567+1
C=60 1234567+1 4#   567+1+2+3+4+5       +1+2+3+%4+5+6+7++1

力度控制短语

音符的力度由 < 和 > 系列短语来控制,< 表示力度渐强,> 表示力度渐弱。 具体的格式说明(其中 N 代表十进制数字):

初始值
<以默认速度(见下)渐强,允许多个连写
>以默认速度渐弱,允许多个连写
=停止渐强或渐弱
>N<10 设定力度渐强或渐弱的默认速度,每四分音长力度增强或减弱 N
<N>64 设定力度为 N,N=1~127,并停止渐强或减弱
<>报告该位置的力度
<N以速度 N 渐强
>N以速度 N 渐弱

同步控制短语

如果乐谱很长,为了避免由于输入出错而导致各个声部之间演奏不同步, 以及为了避免在某个声部暂停演奏的部分书写很长的休止符,引入同步控制短语:

assert_equal 声称到此为止所有已有的通道(声部)的播放时间相等,否则报告出错
make_equal 使得到此为止所有通道的播放时间相等,播放时间不足的通道将补入休止符

乐器列表

普通乐器(I=N)打击乐器($9 [N])
0Acoustic Grand Piano64Soprano Sax
1Bright Acoustic Piano65Alto Sax
2Electric Grand Piano66Tenor Sax
3Honky-tonk Piano67Baritone Sax
4Electric Piano 1 (Rhodes Piano)68Oboe
5Electric Piano 2 (Chorused Piano)69English Horn
6Harpsichord70Bassoon
7Clavinet71Clarinet
8Celesta72Piccolo
9Glockenspiel73Flute
10Music Box74Recorder
11Vibraphone75Pan Flute
12Marimba76Blown Bottle
13Xylophone77Shakuhachi
14Tubular Bells78Whistle
15Dulcimer (Santur)79Ocarina
16Drawbar Organ (Hammond)80Lead 1 (square wave)
17Percussive Organ81Lead 2 (sawtooth wave)
18Rock Organ82Lead 3 (calliope)
19Church Organ83Lead 4 (chiffer)
20Reed Organ84Lead 5 (charang)
21Accordion (French)85Lead 6 (voice solo)
22Harmonica86Lead 7 (fifths)
23Tango Accordion (Band neon)87Lead 8 (bass + lead)
24Acoustic Guitar (nylon)88Pad 1 (new age Fantasia)
25Acoustic Guitar (steel)89Pad 2 (warm)
26Electric Guitar (jazz)90Pad 3 (polysynth)
27Electric Guitar (clean)91Pad 4 (choir space voice)
28Electric Guitar (muted)92Pad 5 (bowed glass)
29Overdriven Guitar93Pad 6 (metallic pro)
30Distortion Guitar94Pad 7 (halo)
31Guitar harmonics95Pad 8 (sweep)
32Acoustic Bass96FX 1 (rain)
33Electric Bass (fingered)97FX 2 (soundtrack)
34Electric Bass (picked)98FX 3 (crystal)
35Fretless Bass99FX 4 (atmosphere)
36Slap Bass 1100FX 5 (brightness)
37Slap Bass 2101FX 6 (goblins)
38Synth Bass 1102FX 7 (echoes, drops)
39Synth Bass 2103FX 8 (sci-fi, star theme)
40Violin104Sitar
41Viola105Banjo
42Cello106Shamisen
43Contrabass107Koto
44Tremolo Strings108Kalimba
45Pizzicato Strings109Bag pipe
46Orchestral Harp110Fiddle
47Timpani111Shanai
48String Ensemble 1 (strings)112Tinkle Bell
49String Ensemble 2 (slow strings)113Agogo
50SynthStrings 1114Steel Drums
51SynthStrings 2115Woodblock
52Choir Aahs116Taiko Drum
53Voice Oohs117Melodic Tom
54Synth Voice118Synth Drum
55Orchestra Hit119Reverse Cymbal
56Trumpet120Guitar Fret Noise
57Trombone121Breath Noise
58Tuba122Seashore
59Muted Trumpet123Bird Tweet
60French Horn124Telephone Ring
61Brass Section125Helicopter
62SynthBrass 1126Applause
63SynthBrass 2127Gunshot
 
35Acoustic Bass Drum
36Bass Drum 1
37Side Stick
38Acoustic Snare
39Hand Clap
40Electric Snare
41Low Floor Tom
42Closed Hi Hat
43High Floor Tom
44Pedal Hi-Hat
45Low Tom
46Open Hi-Hat
47Low-Mid Tom
48Hi Mid Tom
49Crash Cymbal 1
50High Tom
51Ride Cymbal 1
52Chinese Cymbal
53Ride Bell
54Tambourine
55Splash Cymbal
56Cowbell
57Crash Cymbal 2
58Vibraslap
59Ride Cymbal 2
60Hi Bongo
61Low Bongo
62Mute Hi Conga
63Open Hi Conga
64Low Conga
65High Timbale
66Low Timbale
67High Agogo
68Low Agogo
69Cabasa
70Maracas
71Short Whistle
72Long Whistle
73Short Guiro
74Long Guiro
75Claves
76Hi Wood Block
77Low Wood Block
78Mute Cuica
79Open Cuica
80Mute Triangle
81Open Triangle

其它说明

为了提高可读性,书写乐谱时可参考以下建议:

  • 可以在适当的地方插入小节线“|”,小节线不会被程序所解析,但能提高乐谱的清晰性。
  • 适当采用连写方式以及音符偏移短语。
  • 对于多声部的音乐,可以使用 $N 交替书写每个声部的内容,有利于理解声部之间的关系。

举个例子,下面是贝多芬《致爱丽斯》的开头一段:

$0       +3+#2// | +3+#2+37+2+1// | 6/ 0//
$1 C=-C  0/      | 0.             | -636//

$0   136// | 7/ 03#57//  | +1/ 03+3+#2// |
$1   0/.   | -33#5// 0/. | -636// 0/.    |

assert_equal

其它注意事项:

  • 空格(或小节线)是析出短语所需的标志,请注意空格的使用。相连的短语之间缺少空格或者单个短语 中间多出空格都会导致语法错误。
  • 连写的音符以及和弦的音符必须具有相同的音长。连写的前段是音符列表(包括每个音符的前缀), 末尾是共同的音长。各个音符以及末尾的音长之间不能插入空格。
  • 请注意音长记号的书写顺序。初始音长为 1 个四分音符,每个音长记号都是对记号之前的音长结果 进行一次运算,. / \ - 分别相当于 *3/2、*1/2、*1/3、+1。因此,当 - 和其它记号同时出现时,不同的 书写顺序可能表示不同的音长。例如 5/.- 音长为 1 *1/2 *3/2 +1 = 7/4 个四分音符,相当于正规乐谱记法 中的“双附点四分音符”;5/-. 音长为 (1 *1/2 +1) *3/2 = 9/4 个四分音符。当然,这么复杂的音长写法 很少出现。
  • 通道选择短语 $N 可以出现在乐谱的任何位置(不必放在行首),表示其后的任何短语都描述该通道。 乐谱的第一个 $N 之前的所有非音符短语描述所有的通道。音符短语先于 $N 出现则将 $N 默认设为 0 号通道。
  • 关于变音记号(!#%)的作用范围,如果变音记号出现在音符前缀中,改变的是后面单个音符的半音, 如果以音符偏移短语的形式出现,改变的是后面所有音符的半音。两者都跟五线谱记法习惯不一样, 五线谱中变音记号的作用范围是从出现位置到小节末。
参考资料