当前位置:文档之家› C语言音乐演奏程序说明及源程序--www_syyz_com

C语言音乐演奏程序说明及源程序--www_syyz_com

C语言音乐演奏程序说明及源程序https://www.doczj.com/doc/9a490326.html, 一站通: 密码: 不保存登陆保存一天保存一周保存一月 免费注册 忘记密码
在线53人[我的中国心][加入思源] [许愿墙]

校园快讯|学习资讯|CCC留言|校园文学|电脑网络|创业沙龙|博客日志|求职招聘|二手市场|学子相册
时尚女生|旅游指南|动漫天地|校园问答|失物招领|时尚生活|校园交友|笑话频道|分类广告|留言反馈


信息资讯 你问我答 找工作 找人才 二手市场


您的位置:思源驿站 > 电脑网络 > C语言 > 浏览正文

C语言音乐演奏程序说明及源程序

https://www.doczj.com/doc/9a490326.html, 发布:2009-5-18 12:01:42 来自:转载 浏览:300 次
音乐演奏程序说明及源程序

一、实验目的
(1)写自己喜欢或创作的音乐,用C语言开发音乐程序,使在没有乐器的情况下听到自己创作的音乐。
(2)增加在C程序设计方面的知识,提高了对C语言学习的认识。
(3)学习使用两个库函数:
sound() 以指定频率打开PC机的扬声器,频率以赫兹为单位。
nosound() 关闭扬声器。
二、 实验原理:
编写音乐程序时,首先需要制作被演奏音乐的乐谱文件。制作乐谱文件可用不同的符号标记,只要所编制的程序易于识别即可。
下面是编制乐谱文件的一种规则:最高音在每个音的前面加“*”:高音,在每个音的前面加“h”;中音,在每个音的前面加“m”;低音,在每个音的前面加“l”。
“*”,“h”,“m”,“l”与其控制的音符构成音高,决定发声频率。音高的后面是音长,可用整数或小数输入,以控制延时,但中间必须用空格分开。乐谱文件的最前端是一个整数,表示音长基数,一般为300的倍数。乐谱文件的最末端是乐谱文件结束符“##”,以表示乐谱文件结束。
每个音的音长=音长基数*节拍数,其中,音长基数是乐谱文件的第一个字符,如上面乐谱文件为3600,每个音的音频可用一模拟频率值输入。下面是中央C及其前后4个8度中各个音符的频率值
低8度 1 2 3 4 5 6 7
131 147 165 176 196 220 247
中央C 1 2 3 4 5 6 7
262 296 329.7 349.2 392 440 493.9
高8度 1 2 3 4 5 6 7
523.3 587.3 659.3 698.5 784.0 880 987.8
最高8度 1 2 3 4 5 6 7
1046.5 1174.7 1318.5 1396.9 1568.0 1760 1975.5
三、 源程序
#include
#include
#include
void main(int argc,char *argv[])
{

FILE *fp;
int rate;
char sound_high[3];
int sound_long;
register int i=0,j;
int sign=0;
float str[200][2];
if(argc!=2) /*命令行参数个数不正确*/
{ printf("Parameters Errors!\n");
exit(1);
} if((fp=fopen(argv[1],"r"))==NULL) /*文件打开失败*/
{ printf("Open file music.doc Errors!\n");
exit(1);
} fscanf(fp,"%d",&rate);/*读取音长基数的值*/
while(!feof(fp)&&!sign) /*文件没有结束并且数据还是乐谱*/
{ fscanf(fp,"%s%d",sound_high,&sound_long); /*得到音频,音长的数值*/
str[i][1]=rate*sound_long; /*音长=音长基数*节拍数*/
switch(sound_high[0])
{ case'*': /*最高音*/
switch(sound_high[1]) /*确定发声频率*/
{ case'1':
str[i++][0]=1046.5;
break;
case'2':
str[i++][0]=1174.7;
break;
case'3':
str[i++][0]=1318.5;
break;
case'4':
str[i++][0]=1396.9;
break;
case'5':
str[i++][0]=1568;
break;
case'6':
str[i++][0]=1760;
break;
case'7':
str[i++][0]=1975.5;
break;
default:
printf("\nErrors in music.doc\n");
exit(1);
}
break;
case'h': /*高音*/
switch(sound_high[1])
{ case'1':
str[i++][0]=523.3;
break;
case'2':
str[i++][0]=587.3;
break;
case'3':
str[i++][0]=659.3;
break;
case'4':
str[i++][0]=698.5;
break;
case'5':
str[i++][0]=784.0;
break;
case'6':
str[i++][0]=880;
break;
case'7':
str[i++][0]=987.8;
break;
default:
printf("\nErrors in music.doc\n");
exit(1);
}
break;
case'm': /*中音*/
switch(sound_high[1])
{ case'1':
str[i++][0]=262;
break;
case'2':
str[i++][0]=296;
break;
case'3':
str[i++][0]=329.6;
break;
case'4':
str[i++][0]=349.2;
break;
case'5':
str[i++][0]=392;
break;
case'6':
str[i++][0]=440;
break;
case'7':
str[i++][0]=493.9;
break;
default:
printf("\nErrors in music.doc\n");
exit(1);
}
break;
c

ase'l': /*低音*/
switch(sound_high[1])
{ case'1':
str[i++][0]=131;
break;
case'2':
str[i++][0]=147;
break;
case'3':
str[i++][0]=165;
break;
case'4':
str[i++][0]=176;
break;
case'5':
str[i++][0]=196;
break;
case'6':
str[i++][0]=220;
break;
case'7':
str[i++][0]=247;
break;
default:
printf("\nErrors in music.doc\n");
exit(1);
}
break;
case'#':
if(sound_high[1]=='#')sign=1;
break;
default:
printf("\nErrors in music.doc\n");
exit(1);
} }
for(j=0;j<=i-1;j++)
{ sound(str[j][0]); /*按频率发出歌曲的音调*/
delay(str[j][1]);
} nosound(); /*关闭扬声器*/
}
四、 乐谱例:巴赫的《小步舞曲》
600 h2 4 m5 1 m6 1 m7 1 h1 1 h2 4 m5 4 m5 4 h3 4 h1 1 h2 1 h3 1 h4 1
h5 4 m5 4 m5 4 h1 4 h2 1 h1 1 m7 1 m6 1 m7 4 h1 1 m7 1 m6 1 m5 1 m4
4 m5 1 m6 1 m7 1 m5 1 m6 6 l2 1 m1 1 l7 1 l6 1 h2 4 m5 1 m6 1 m7 1
h1 1 h2 4 m5 4 m5 4 h3 4 h1 1 h2 1 h3 1 h4 1 h5 4 m5 4 m5 4 h1 4 h2
1 h1 1 m7 1 m6 1 m7 4 h1 1 m7 1 m6 1 m5 1 m6 4 m7 1 m6 1 m5 1 m4 1
m5 10 ##

1.2目的
⑴ 用C语言开发音乐程序比较新颖,有创意.是广大计算机爱好者所喜爱的程序的一种.
⑵ 此程序设计可以增加我在C程序设计方面的知识,使我提高了对C语言学习的认识.
1.3意义
用C语言开发音乐程序是一种简单、易懂的方法.它既容易学习,又可以让爱好音乐的人编写自己喜欢或创作的音乐,使他们能够在没有乐器的情况下听到自己创作的音乐,我认为市场开发前景十分广阔.

2方案论证
2.1可行性要求
程序是通过TurboC2作为开发工具编写的,它简单易懂,能够被人们所接受.这个程序主要应用了dos.h、stdio.h、string.h、stdlib.h、ctype.h等库函数,dos.h使用来处理声音的,stdio.h使用来处理输入输出函数的,string,h是用来处理字符串函数的,stdlib.h使用来处理动态储存分配函数的.


(编辑:孤舟钓徒)【留言评论】【在线投稿】【打印网页】【关闭窗口】【↑顶部】
+ 相关文章
·c#求一年中的第几天
·c语言学习
·微软架构师谈编程语言发展(一)
·想知道学习编程从何

入手吗?
·C语言小球弹跳游戏程序运算实训说明
·C语言汉字显示程序说明及源程序
·C语言文本文件行编辑程序说明及源程序
·C语言进制转换程序说明及源程序
·C语言多项式运算程序说明及源程序
·C语言猜数字游戏!可查看游戏排名!

版权与免责声明:
1.凡本网注明来源为“盐城师范学院思源驿站”的所有作品,包括文字与图片,未经本网授权不得转载。违反上述声明者,本网将依法追究法律责任。

2.
凡注明"来源:xxx(非本站)"的作品,均转载自其它媒体,本网转载的目的在于传播更多信息,此类稿件并不代表本网观点,本网不承担此类稿件侵权行为的直接责任及连带责任。
3. 如因作品内容、版权等需要同本网联系的,请在作品在本网发表之日起30日内联系,否则视为放弃相关权利




版权所有:盐城师范学院思源驿站 2000-2010 https://www.doczj.com/doc/9a490326.html,, All Rights Reserved
咨询热线:0515-********

相关主题
文本预览
相关文档 最新文档