c语言编音乐发生器.docVIP

  • 5
  • 0
  • 约3.62千字
  • 约 5页
  • 2017-06-07 发布于重庆
  • 举报
c语言编音乐发生器

c语言编音乐发生器, 用c语言编一个音乐发生器, 要求: 可以按自己的方法格式输入乐谱, 能保存乐谱, 能用自己的程序打开乐谱,发出声音, 我的思路是这样的: 输入部分: 1,输入数具:连续音高,音长(音高用abc表示,音长用123表示)。 2,把输入变量处理成音高单位为hz音长单位为ms的数字, 3,保存在数组中, 4,保存数组文件, 打开部分: 1,打开文件, 2,使用sound()来实现发出声音, 哪位大侠来帮完成一下吧,,, 如果有好的方法也可以,, 小弟c语言不精,, 实在学不会保存数组了, 问题补充: 不是像一楼的那个那样的,, 我不会把数组写到文件里面里了,, 另外还有一个问题是: 编辑音乐是要随时可以退出,, 这样数组的大小还要有控制变量,, 其他回答 共5条 保存数组我知道就试用俩个for循环 可我没学过sound() #include stdio.h void main() { int a[4][5]; int b,c; for(b=0;b4;b++) { for(c=0;c5;c++) { scanf(%d,a[b][c]); } } } 保存数组这样就可以了 回答者: shelley1792 | 一级 | 2007-8-12 21:48 en…… 回答者:| 一级 | 2007-8-13 00:05 不对啊 回答者: nongwenhua | 三级 | 2007-8-15 18:22 你的思路基本上是正确的。 其实这个程序编起来不是很烦的,加点耐心和毅力,就可以了。 首先,你要定制一个音阶数组,分别对应几个音阶的频率,形如: int Notes[5][7] ={频率}; 其中数组第一个下标是音阶,这里我假设你定义五个,后面的“8”指七个音色(1234567) 具体的频率数值我就不帮你查了,如果是老师给你的作业,他应该给你这方面你资料。 然后你应该定义各个音色的符号,在这里我介绍一个规范给你参考: 1:c,2:d,3:e,4:f,5:g,6:a,7:b. 至于定义音阶:使用o; 音乐的停顿:使用r; 如果你还要实现升调,使用#,例如#1,你就用#c代替。 这个规范何来?玩过以前的小霸王学习机可能会知道,里面有种basic语言,可以让电视的喇叭发声,其脚本语言就是这种了。 至于音长,其实是sleep的时间,这个根据你的喜爱可以定义数组,或者定义一个基本拍子的宏,如 #define PULSE_LEN 1000/*1000ms,一秒,具体值你可以自己定义,我不是学音乐的,还不知道一拍到底有多长呢*/ 然后四拍就是4*PULSE_LEN; 有了上面的准备后就可以动手编了; 主要的难点有两个,一个是乐谱的编辑,这个可能需要几百行的代码才能实现你说的功能了,偷偷懒就使用系统的记事本来帮你吧:^_^ 比如你要编辑、新建一个乐谱,先用scanf取得文件的路径,然后用记事本打开它(如果文件不存在,记事本会提示你是否需要新建的了): char file_path[256],cmd_line[300]; printf(input file path and name to edit or create:); scanf(%s,file_path); sprintf(cmd_line,notepad %s,file_path); system(cmd_line); 之后就是打开文件及播放了: char *notes_in_file=NULL; long size_notes=0; FILE *fp = fopen(file_path,r); if(fp == NULL) {错误处理,return;} fseek(fp,0,SEEK_END); size_notes=ftell(fp); if(size_notes=0) {error;} fseek(fp,0,SEEK_SET); notes_in_file = (char*)malloc(size_notes*sizeof(char)); fread(notes_in_file,size_notes,1,fp); 好了,现在乐谱都读进数组notes_in_file中了,之后就是逐一读取、播放了: 如果不处理#的话就比较简单:乐谱为一个字母跟一个延时(不考虑延时超过9个节拍的情况) for(int i=0;isize_notes;i+=2) { switch(notes_in_file[i]) { case o:改变音阶;break; case r:延时;break; defualt:play_note(notes_in_file[i],notes_in_file[i+1]);break; } } 其中的play

文档评论(0)

1亿VIP精品文档

相关文档