#Iinclude Beep( )函数
曲谱简谱,频谱对照表
结构储存简谱( tune音调,tone音色,hold音长)
功能函数(播放,初始化music结构,创建单曲,列表选择)
//声明部分#include
//主函数部分int main(){ char c; printf('*******曲目********\n' '[1].欢乐颂\n' '[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;}
void init(song S,int *I)//初始化结构{ int i; for(i=0;i
//附录:天空之城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;}
size最大尺寸不能超过数组实际容量(否则程序停止运行)
音长不宜过短,否则蜂鸣器会罢工
添加新曲目,要三处改动(新曲目函数声明,switch选择标签,新曲目函数定义)
程序优化工作(调用频谱只需一次,传递指针避免拷贝,避免不必要的计算,具有可更新性)
当曲谱较长时,利用printf('%d',sizeof(数组n)/sizeof(int);快速得知size大小
结构数组必须声明为静态变量,否则函数结束后内存会释放掉
普通曲目:填写方便 ,音调三档(低中高),音长三档(越大音长越长)
高级曲目:信息准确 ,频谱更广(低中高八),音长任意(0~2000)