好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

C语言程序设计(第9章实用编程技巧)3.docx

9页
  • 卖家[上传人]:碎****木
  • 文档编号:288554665
  • 上传时间:2022-05-05
  • 文档格式:DOCX
  • 文档大小:14.07KB
  • / 9 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • C语言程序设计(第9章实用编程技巧)39.3.1 音乐程序设计 我们知道,音乐是音高和音长的有序组合,设计微机音乐最重要的就是如何定义音高和音长,以及如何让扬声器发出指定的音符下面给出音符与频率的关系表C语言供应的三个函数sound( )、nosound( )和clock( )可以很便利地解决上述的问题sound( )函数可以用指定频率翻开PC机扬声器直到用nosound( )函数来关闭它; clock( )函数正好用来掌握发声时间,而且它不受PC机主频凹凸的影响下面这段程序可使微机发出c调1的声音 表9-2 音符与频率关系表 音符 c d e f g a b 1 2 3 4 5 6 7 频率 262 294 330 349 392 440 494 音符 c d e f g a b 1 2 3 4 5 6 7 频率 523 587 659 698 784 880 988 音符 c d e f g a b 1 2 3 4 5 6 7 频率 1047 1175 1319 1397 2568 1760 1976 [例9-12] 音乐程序music1.c#include#includevoid pause(int);void sound1(int,int);void main(void){ int i,freq,speed=5; int time=4*speed; char *qm=“iddggfff dddfghhhggg ddggfff\ ddffhjq wpggjhgddg hhqwwqjjjggg\ ddgqgfff ddffhj“;/*定义歌曲*/ while (*qm++ !=”\0”){ i=1; switch(*qm){ case ”k”: time=1*speed; i=0; break; case ”i”: time=6*speed; i=0; break; case ”o”: time=10*speed; i=0; break; case ”p”: pause(time); i=0; break; case ”a”: freq=523; break; case ”s”: freq=587; break; case ”d”: freq=659; break; case ”f”: freq=698; break; case ”g”: freq=784; break; case ”h”: freq=880; break; case ”j”: freq=988; break; case ”z”: freq=262; break; case ”X”: freq=294; break; case ”c”: freq=330; break; case ”v”: freq=349; break; case ”b”: freq=392; break; case ”n”: freq=440; break; case ”m”: freq=494; break; case ”q”: freq=1047; break; case ”w”: freq=1175; break; case ”e”: freq=1319; break; case ”r”: freq=1397; break; case ”t”: freq=2568; break; case ”y”: freq=1760; break; case ”u”: freq=1976; break; default: i=0; break; } if(i) sound1(freq,time); } }void sound1(int freq,int time) /*freq为频率,time为持续时间*/{ union{ long divisor; unsigned char c[2]; }count; unsigned char ch; count.divisor=1193280/freq; /* 1193280 是系统时钟速率*/ outp(67,182); outp(66,count.c[0]); outp(66,count.c[1]); ch=inp(97); outp(97,ch|3); pause(time); outp(97,ch); }void pause(int time){ int t1,t2; union REGS in,out; in.h.ah=0X2c; int86(0X21, /* 取当前时间*/ t1=t2=100*out.h.dh+out.h.dl; /*out.h.dh 为秒值,out.h.dl 为1/100 秒值*/ while(t2-t1

      因此音乐演奏的关键是曲调的定义与识别及发音时间的掌握 为了实现计算机自动识谱,可定义一套曲调的编码,其中“ 1 2 3 4 5 6 7”表示中音的1、2、3、5、6、7;高音可在中音之后加“ *”;低音在中音之后加“;”号;减号“ -”表示两拍;“.”表示一拍半;“=”表示四分之一拍;下画线“ _”表示1 / 2拍 我们可用文本编辑软件(如E D I T)按上述编码将一首曲子的乐谱输到计算机中,得到乐谱文件供程序调用其中乐谱文件的第一节的数字分别为:节拍基数和速度,输入时用空格分开乐谱文件的其次行到最终一行为歌曲的内容,每小节之间用“ /”分开 下面依据“世上只有妈妈好”编制曲谱文件如下Ma.txt: 。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.