资源描述:
《第25课,乐谱方式输入的音乐播放》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第25课,乐谱方式输入的音乐播放,仙剑奇侠传这一课开始,我们就要听到美妙的音乐了,这一课,我们可以听到演奏仙剑奇侠传的乐谱。这一课的程序,增加了2个比较复杂的函数,一个乐谱解释函数,一个音乐播放函数。我们音乐仙剑奇侠传的乐谱以一个我们自己定义的乐谱形式写好,作为一个预定义的字符串。再通过乐谱解释函数解释为“音符频率的序号”和“音符播放的时间”两个数组,在音乐播放函数中,就将音符频率的序号数组对应的频率送入定时器预置数中,再延时对应音符播放的时间。这样音乐就播放出来了。仙剑奇侠传的乐谱:"
2、3_3_3_2_3-
3、2_3_2_2_,6,6_,7_
4、
5、12_1_,7,6_,5_
6、,6---
7、""3_3_3_2_3.6_
8、5_6_5_5_22_3_
9、45_4_32_1_
10、3.--3_
11、""67_6_55_3_
12、5--3_5_
13、26_5_32_3_
14、3---
15、""26_6_6-
16、16_6_66_7_
17、`17_6_76_7_
18、3.--3_
19、""67_6_55_3_
20、5--3_5_
21、67_6_76_7_
22、3---
23、""26_6_6-
24、16_6_66_7_
25、`17_6_7.5_
26、6---
27、"乐谱书写规则:1234567为7个基本音阶前面加逗号','表示这是低音前面加上点号'`'表示这是高音后面加'#'
28、,表示这个音符升半个音阶后面加'.',表示这个音符要再加长自身一半的延时后面加一个或多个'-',每个表示延时一拍后面加一个或多个'_',表示这个音符要缩短自身一半的时长,最多支持2个'_'。这些规则对一般的乐谱都可以应付得来了。下面看程序:――――――――――――――――――――――――#defineucharunsignedchar//定义一下方便使用#defineuintunsignedint#defineulongunsignedlong#include//包括一个52标准内核的头文件charcodedx516[3]_a
29、t_0x003b;//这是为了仿真设置的sbitBEEP=P1^7;//喇叭输出脚sbitK1=P3^2;sbitK2=P3^5;sbitK3=P2^4;sbitK4=P2^5;ucharth0_f;//在中断中装载的T0的值高8位uchartl0_f;//在中断中装载的T0的值低8位//T0的值,及输出频率对照表ucharcodefreq[36*2]={0xA9,0xEF,//00220HZ,1//00x93,0xF0,//00233HZ,1#0x73,0xF1,//00247HZ,20x49,0xF2,//00262HZ,2#0x07,0x
30、F3,//00277HZ,30xC8,0xF3,//00294HZ,40x73,0xF4,//00311HZ,4#0x1E,0xF5,//00330HZ,50xB6,0xF5,//00349HZ,5#0x4C,0xF6,//00370HZ,60xD7,0xF6,//00392HZ,6#0x5A,0xF7,//00415HZ,70xD8,0xF7,//00440HZ1//120x4D,0xF8,//00466HZ1#//130xBD,0xF8,//00494HZ2//140x24,0xF9,//00523HZ2#//150x87,0xF9,//0
31、0554HZ3//160xE4,0xF9,//00587HZ4//170x3D,0xFA,//00622HZ4#//180x90,0xFA,//00659HZ5//190xDE,0xFA,//00698HZ5#//200x29,0xFB,//00740HZ6//210x6F,0xFB,//00784HZ6#//220xB1,0xFB,//00831HZ7//230xEF,0xFB,//00880HZ`10x2A,0xFC,//00932HZ`1#0x62,0xFC,//00988HZ`20x95,0xFC,//01046HZ`2#0xC7,0x
32、FC,//01109HZ`30xF6,0xFC,//01175HZ`40x22,0xFD,//01244HZ`4#0x4B,0xFD,//01318HZ`50x73,0xFD,//01397HZ`5#0x98,0xFD,//01480HZ`60xBB,0xFD,//01568HZ`6#0xDC,0xFD,//01661HZ`7//35};//定时中断0,用于产生唱歌频率timer0()interrupt1{TL0=tl0_f;TH0=th0_f;//调入预定时值BEEP=~BEEP;//取反音乐输出IO}//******************
33、************//音乐符号串解释函数//入口:要解释的音乐符号串,输出的音调串,输出的时长串changedata(uchar*song,uc