<调号>,<节拍>,<每分钟节拍数>,<音轨个数> [1] ..... [n] ....
说明:
1、调号,占用一个字符,必须为A、B、C、D、E、F、G,否则视为C调;
2、节拍,取值如下:2/4,3/4,4/4,3/8,6/8....等。
3、每分钟节拍数:表示每分钟演奏的节拍总数,取值在40-200崐之间,否则视为120。
4、音轨个数表示此歌曲声部数。如三声部,可将其设置为3。
5、[n]后表示此音轨的音乐信息。有如下说明字符组合而成。
音高:
高音 C D E F G A B 中音 1 2 3 4 5 6 7 低音 c d e f g a b
若某音升半音,则在其后加#号;降半音,在其后加b字符。
音长: -(延长四分音符的一拍)、_(8分音符,后可带符点)、=(16分音符,后可带符点)、.(附点音符,后不可带符点)、:(32分音符,后可带符点)、;(64分音符,后不可带符点)。
说明:在书写时,请先写完整的音高,再写音长,如简谱中的"3-",则应该为"3#-"。
Pn:表示设置音色,取值1-256之间。 {}:歌词或注释。 |: 表示小节分隔符。 \: 后继音均降八度 /: 后继音均升八度 Sn:音量大小,n数值越大,音量越大。 其它的字符,视为非法字符。
以下为歌曲《解放军的天》片断MIDI文本文件。
[MIDI]
F,2/4,150,2
[1]
P53
/3=3=3=2= 3_.2= | 1_1=e= g | 3=3=3=2= 3_3=2= | 1_1=e= g |
\6_. 5= 6_.5= | 6_C_ 3_5_| 6=6=6=6= 6_6_ | 5=6=C_ C_3_|
2_.3= 5_C_ | 6=5=3_ 5 | 6_. / 1= 2_.1=| 2_0_ 3_.2= |
1_0_ 2_2_ | \5_.6= /1_3_ | 3=1=a_ 1 \ |
[2]
P53 \
1_C_ 5_G_ | 1_c_ 5_G_ | 1_C_ 5_G_ | 1_c_ 5_G_ |
a_6_ 4_6_ | 1_5_ 3_ 5_ | a_6_ 4_6_ | 1_5_ 3_ 5_ |
1_3_ 5_1_ | 1_6_ 4_6_ | 2_5_ 1_5_ | g_5_ 1_5_ |
1_5_ 3_5_ | 1_6_ 4_6_| 3_2_ 1 |
四、程序实现
以下为MIDI文件生成的全部源程序,经Borland c++3.1编译、连接通过。
#include <stdlib.h> #include <stdio.h> #include <io.h> #include <string.h> #define C1 60 //C调1的键名值 #define FOURPAINUM 64 //1/4音符计数 #define MIDICLOCK 24 //每1/64音符的MIDICLOCK数 #define JumpNullChar(x) \ //跳过空字符 { \ while(*x==' ' \ ||*x=='\t' \ ||*x=='\n' \ ||*x=='|') \ x++; \ }; enum ERRORCODE{ //处理错误信息 ChangeOK, //转换成功 TextFileNotOpen, //文本文件不能打开 MidiFileCanNotCreate, //指定的MIDI文件不能建立 TextFileToBig, //文本文件太大
上一篇:EMS图片格式转换(Java)程序
下一篇:利用手机模块实现短消息(一)
|