c语言电子琴设计

c语言电子琴设计

ID:794588

大小:339.53 KB

页数:21页

时间:2017-09-05

c语言电子琴设计_第1页
c语言电子琴设计_第2页
c语言电子琴设计_第3页
c语言电子琴设计_第4页
c语言电子琴设计_第5页
资源描述:

《c语言电子琴设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、C语言简易电子琴程序设计王永平2011-3-22简介:这是一个用C语言写的简易电子琴程序。里面写了五首曲子,分别是《东方红》、《挥剑问情》、《祝你生日快乐》、《回梦游仙》和《蝶恋》。可自己弹奏。程序可发ABCDEFG调,低中高音共147个音。本程序经TurboC2.0调试通过,确认无任何问题,现将源码公布。对于内置的五首曲子及8255发声频率表,可访问网址复制:http://hi.baidu.com/xuanyiaijie/blog/item/82cc95121787aae9c3ce7991.html其他部分不可复制,不可

2、修改,所以不要幻想直接copy这些程序。思维是最重要的,事实上,当你自己一字一字敲下这些代码进行调试时,你会体会更深,比如“;”的重要性,什么时候用1,什么时候用0,等等。一、简易电子琴先来看看要做的简易电子琴是个什么样子~1、右下角,生成的电子琴EXE文件2、双击打开,出现主界面3、按数字键1-5可以播放预置的音乐4、播放音乐时可以按数字键0随时退出播放,按0后出现:5、按数字键6,自己弹奏下~首先提示选择什么音调(按数字键0可以取消选择,回到主界面)6、然后提示选择节拍(按数字键0可以取消选择,回到主界面)7、选好节拍

3、开始弹奏~8、按数字键8退出程序,先显示“Thanksforusing!”,延时2s后退出程序9、若是不能正确发音,可以按7调节~二、设计分析1、要做出这个简易电子琴,首先要解决发音问题。1)用什么发声。调用系统主板8255发声。2)发音程序。C语言里有sound()函数,sound(Frequency)可发频率为Frequency的音。发出一个音后,它不能一直存在,为此需要控制发音持续多长时间。这就需要延时程序。C语言里带的延时程序有sleep(s);delay(ms);显然不能用sleep(s);函数,因为这个程序最少

4、都会延时1秒,至少每秒才发一个音的歌也太难听了。执行延时程序后,还需调用一个函数nosound();否则它还是会一直发原来那个音停不下来。这样要发一个音,需要的程序为:sound(Frequency);delay(ms);nosound();3)延时程序。大家都知道delay();这个函数很不精确,不精确到什么程度呢,delay(10000)原理上说它应该延时10秒,事实上,在绝大多数电脑上,这个延时程序不用1秒就运行完了。因而不可能用系统自带的delay()函数来延时。C语言里有实现精确延时的方法,但总觉得有点麻烦。怎么

5、办?只好自己写个延时程序了。电脑运行速度很快,要让它实现延时,比较简单的就是让电脑做加减法。下面是我写的一个延时子程序,针对这个电子琴编的。它是一个三重循环,a,b,c都是变量。num为要实现的延时时间,单位是ms,比如200ms。对不同电脑,执行这个程序的时间是不同的,需要调节一下b,c的上限值来实现精确定时。在这个电子琴程序里,按键7退出时设置是延时2秒再退出,可以通过对照标准时间来改变b,c上限值,让这个延时程序变精确。voidDelay(intnum){inta,b,c;for(a=0;a

6、b=0;b<1000;b++)for(c=0;c<440;c++);}4)适应不同电脑。刚刚说了,不同电脑的运算速度不一样,因而程序还需要增加一个调音的功能,实际上就是改变b,c的上限值。调音程序:核心思想,通过按键改变bmax,cmax的值。延时程序是个三重循环,bmax可以用作粗调,cmax可以用作微调。这几句就是对怎么控制bmax,cmax的说明。printf("TimeAdjust!");printf("Press'a'toacceleratetime,'d'toslowdown.");printf("Pr

7、ess'1-5'toRoughadjustment,or'q-t'toFineadjustment.");printf("Rough:1->1;2->2;3->5;4->10;5->100;6->1000");printf("Fine:q->1;w->2;e->5;r->10;t->100;");这样延时程序需要写成:voidDelay(intnum){inta,b,c;for(a=0;a

8、、如何完整弹奏一首歌曲。一首歌,有音调,有节拍用两个数组,一个存音调,一个存节拍,然后再循环播放即可实现那么,如何判断一首歌播完?用一个特殊的频率即可,本程序用了频率1for(i=0;freq1[i]!=1;i++){sound(freq1[i]);Delay(dely1[i]);nosound();c

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。