- //声明部分 
-   
- #include<stdio.h> 
-   
- #include<windows.h> 
-   
- #define LENTH 300//音长标准 
-   
- struct music 
-   
- { 
-   
-     unsigned tune;//音调 
-   
-     unsigned tone;//音色 
-   
-     unsigned hold;//音长 
-   
- }; 
-   
- typedef struct music* song;//结构体指针 
-   
- static int size;//静态变量 
-   
- void init(song S,int *I);//初始化结构体 
-   
- void play(song S);//播放歌曲 
-   
- int record(void);//曲目 
-   
- void play_adv(song S);//高级播放 
-   
- song test(void);//测试歌曲 
-   
- song test_adv(void);//测试歌曲-高级 
-   
- song happy(void);//欢乐颂 
-   
- song star_adv(void);//小星星-高级 
-   
- song sky(void);//天空之城 
-   
- song mate(void);//同桌的你 
-   
- song liangzu(void);//梁祝  
-   
- //主函数部分 
-   
- int main() 
-   
- { 
-   
-     char c; 
-   
-   
-             "[1].欢乐颂\n" 
-   
-             "[2].小星星\n" 
-   
-             "[3].天空之城\n" 
-              
-             "[4].同桌的你\n" 
-              
-             "[5].梁祝\n" 
-              
-             "[0].测试音调\n" 
-   
-             "******************\n"); 
-   
-     do{ 
-   
-   
-     switch(record())//曲目选择 
-   
-     { 
-   
-         case 1: puts("--欢乐颂--");-  play (- happy ());break;
 
-   
-         case 2: puts("--小星星--");-  play_adv (- star_adv ());break;
 
-          
-         case 3: puts("--天空之城--");-  play (- sky ());break;
 
-          
-         case 4: puts("--同桌的你--");-  play (- mate ());break;
 
-          
-         case 5: puts("--梁祝--");-  play (- liangzu ());break;
 
-   
-         case 0: puts("--测试发声器--");-  play (- test ());break;
 
-   
-         default: puts("--高级测试发音--");-  play_adv (- test_adv ());
 
-   
-     } 
-   
-   
-   
-     }while(c!='q'); 
-   
-   
-     return 0; 
-   
- } 
-   
-   
- void init(song S,int *I)//初始化结构 
-   
- { 
-   
-     int i; 
-   
-     for(i=0;i<size;i++) 
-   
-     { 
-   
-         S[i].tune=I[i]/100;//音调 
-   
-         S[i].hold=I[i]%10;//音长 
-   
-         S[i].tone=(I[i]-S[i].tune*100)/10;//音色 
-   
-     } 
-   
- } 
-   
- void play(song S)//播放 
-   
- { 
-   
-     int i; 
-   
-     unsigned pitch[3][7]={ 
-   
-     //Do Re Mi Fa So La Si 
-   
-     {262,294,330,349,392,440,494}, 
-   
-     {523,587,659,698,784,880,988}, 
-   
-     {1046,1175,1318,1397,1568,1760,1967} 
-   
-     }; 
-   
-     for(i=0;i<size;i++) 
-   
-     { 
-   
-         //播放功能的核心 
-   
-         Beep(pitch[S[i].tune-1][S[i].tone-1],S[i].hold*LENTH); 
-   
-   
-     } 
-   
-   
-     size=0; 
-   
- } 
-   
- int record(void) 
-   
- { 
-   
-     int select; 
-   
-   
-     while(!scanf("%d",&- select ))
 
-   
-     { 
-   
-   
-   
-     } 
-   
-     return select; 
-   
- } 
-   
- void play_adv(song S)//高级播放 
-   
- { 
-   
-     //只能用于播放高级曲目 
-   
-     int i; 
-   
-     unsigned pitch[4][7]={ 
-   
-     //Do Re Mi Fa So La Si 
-   
-     {131,147,165,175,196,220,247},//低度音 
-   
-     {262,294,330,349,392,440,494},//中度音 
-   
-     {523,587,659,698,784,880,988},//高度音 
-   
-     {1046,1175,1318,1397,1568,1760,1967}//高八度 
-   
-     }; 
-   
-     for(i=0;i<size;i++) 
-   
-     { 
-   
-         Beep(pitch[S[i].tune-1][S[i].tone-1],S[i].hold); 
-   
-   
-     } 
-   
-   
-     size=0; 
-   
- } 
-   
- song test(void) 
-   
- { 
-   
-     //数组尺寸必须手动填写 
-   
-     static struct music test[21]; 
-   
-     int n[21]={ 
-   
-     112,122,132,142,152,162,173, 
-   
-     212,222,232,242,252,262,273, 
-   
-     312,322,332,342,352,362,373 
-   
-     }; 
-   
-     //普通曲目  百位-音调   十位-音调   个位-音长 
-   
-     size=21; 
-   
-     init(test,n); 
-   
-     //通过init函数进行解析 
-   
-     return test; 
-   
- } 
-   
- song test_adv(void)//高级曲目 
-   
- { 
-   
-     //数组尺寸可以不填,利用sizeof计算 
-   
-     static struct music test[]={ 
-   
-       {1,1,300},{1,2,300},{1,3,300},{1,4,300},{1,5,300},{1,6,300},{1,7,600}, 
-   
-       {2,1,300},{2,2,300},{2,3,300},{2,4,300},{2,5,300},{2,6,300},{2,7,600}, 
-   
-       {3,1,300},{3,2,300},{3,3,300},{3,4,300},{3,5,300},{3,6,300},{3,7,600}, 
-   
-       {4,1,300},{4,2,300},{4,3,300},{4,4,300},{4,5,300},{4,6,300},{4,7,600} 
-   
-     }; 
-   
-     //(音调,音色,音长) 
-   
-     size=sizeof(test)/sizeof(struct music); 
-   
-     //自动计算数组长度 
-   
-     return test; 
-   
- } 
-   
- song happy(void) 
-   
- { 
-   
-     static struct music happy[62]; 
-   
-     int n[62]={ 
-   
-     232,232,242,252,252,242,232,222,212,212,222,232,232,222,223, 
-   
-     232,232,242,252,252,242,232,222,212,212,222,232,222,212,213, 
-   
-     222,222,232,212,222,231,241,231,212,222,232,242,231,211,212,222,253, 
-   
-     232,232,242,252,252,242,232,222,212,212,222,232,222,211,213 
-   
-     }; 
-   
-     size=62; 
-   
-     init(happy,n); 
-   
-     return happy; 
-   
- } 
-   
- song star_adv(void) 
-   
- { 
-   
-     static struct music star[]={ 
-   
-       {3,1,500},{3,1,500},{3,5,500},{3,5,500},{3,6,500},{3,6,500},{3,5,1000}, 
-   
-       {3,4,500},{3,4,500},{3,3,500},{3,3,500},{3,2,500},{3,2,500},{3,1,1000}, 
-   
-       {3,5,500},{3,5,500},{3,4,500},{3,4,500},{3,3,500},{3,3,500},{3,2,1000}, 
-   
-       {3,5,500},{3,5,500},{3,4,500},{3,4,500},{3,3,500},{3,3,500},{3,2,1000}, 
-   
-       {3,1,500},{3,1,500},{3,5,500},{3,5,500},{3,6,500},{3,6,500},{3,5,1000}, 
-   
-       {3,4,500},{3,4,500},{3,3,500},{3,3,500},{3,2,500},{3,2,500},{3,1,1000} 
-   
-     }; 
-   
-     size=sizeof(star)/sizeof(struct music); 
-   
-     return star; 
-   
- } 
-   
-   
- //附录:天空之城 
-   
- song sky(void) 
-   
- { 
-   
-     static struct music sky[118]; 
-   
-     int n[117]={ 
-   
-     261,271,312,271,312,332,272,231,231,    262,251,262,312,252,232,242,231,241,312, 
-   
-     232,311,311,311,272,241,241,272,272,261,271,    312,271,312,332,272,231,231,262,251,262,312, 
-   
-     252,221,231,242,311,271,271,311,312,321,321,331,311,312,    311,271,261,261,272,252,262,311,321,332,321,332,352, 
-   
-     322,251,251,312,271,312,332,332,    261,271,312,272,321,321,312,251,252,342,332,322,312, 
-   
-     332,332,362,352,352,331,321,312,311,    322,311,321,322,352,332,332,362,352, 
-   
-     331,321,312,311,322,311,321,322,272,262 
-   
-     }; 
-   
-     size=117; 
-   
-     init(sky,n); 
-   
-     return sky; 
-   
- } 
-   
-   
- //附录:同桌的你 
-   
- song mate(void) 
-   
- { 
-   
-     static struct music mate[98]; 
-   
-     int n[98]={ 
-   
-     251,251,251,251,231,241,252,272,261,261,261,261,241,261,252,252, 
-   
-     251,251,251,251,271,261,251,241,242,241,241,241,241,231,221, 
-   
-     212,212,251,251,251,251,231,241,252,272,261,261,261,261,241,261,252,252, 
-   
-     251,251,251,251,271,261,251,241,242,241,241,241,241,231,221,212,212, 
-   
-     311,311,311,311,251,261,312,332,321,321,321,321,311,271, 
-   
-     262,262,271,271,271,271,271,311,322,252,271,271,311,321,311,271,312,312 
-   
-     }; 
-   
-     size=98; 
-   
-     init(mate,n); 
-   
-     return mate; 
-   
- } 
-   
-   
- //附录:梁祝 
-   
- song liangzu(void) 
-   
- { 
-   
-     static struct music liangzu[100]; 
-   
-     int n[99]={ 
-   
-     271,261,271,252,261,241,231,221,231,241,231,252,231,221,231,251,221,231,242,231,221,213,251,171,221,161,211,153,161,211,153, 
-   
-     132,152,161,212,221,161,211,151,252,311,261,251,231,251,223,222,231,171,161,152,161,211,221,131,211, 
-   
-     161,151,161,211,153,232,251,171,221,161,211,152,131,151,131,151,161,171,221,163,151,161,212,221,251,231,221,231,221, 
-   
-     211,161,151,132,212,162,211,161,151,131,151,161,211,153//,231,251,221,231,221,211,171,161,153 
-   
-     }; 
-   
-     size=99; 
-   
-     init(liangzu,n); 
-   
-     return liangzu; 
-   
- }