手抄报 安全手抄报 手抄报内容 手抄报图片 英语手抄报 清明节手抄报 节约用水手抄报

用C语言做一个可以播放音乐的八音盒

时间:2024-10-13 15:56:46

1、//声明部分#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);//小星星-高级

2、//主函数部分int main(){ char c; printf("******涯箨唁峦*曲目********\n" "[1].欢乐颂\n&qu泠贾高框ot; "[2].小星星\n" "[0].测试音调\n" "******************\n"); do{ printf("\n"); switch(record())//曲目选择 { case 1: puts("--欢乐颂--"); play(happy());break; case 2: puts("--小星星--"); play_adv(star_adv());break; case 0: puts("--测试发声器--"); play(test());break; default: puts("--高级测试发音--"); play_adv(test_adv()); } printf("要继续吗(q退出)?"); c=getch();//自动获取输入 }while(c!='q'); puts("\n--结束--\n"); return 0;}

3、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); putchar('*'); } puts("\n演奏结束\n"); size=0;}int record(void){ int select; printf("请输入选择的曲目:"); while(!scanf("%d",&select)) { printf("请输入数字!\n"); getchar(); } 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); putchar('*'); } puts("\n演奏结束\n"); 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;}

4、//附录:天空之城song sky(void){ static struct music sk鲻戟缒男y[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;}

5、//附录:同桌的你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;}

6、//附录:梁祝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;}

© 手抄报圈