微信公众号 
图码生活

每天发布有五花八门的文章,各种有趣的知识等,期待您的订阅与参与
电脑报 1992-2001 十年文章全集
电脑报 1992-2001 十年文章全集
包含从 1992 年 - 2001 年间,两万余篇期刊文章,查询最少输入两个字符
随便看看
读取中
读取中
标题C语言音乐程序设计
栏目软件操作与技巧
作者湖北 吕涛
发布1993-01-15
  音乐是音高和音长的有序组合,设计微机音乐最重要的就是如何定义音高和音长,以及如何让扬声器发出指定的音符。C语言提供的三个函数sound()nosound()clock()可以使我们很方便地解决这个问题。sound()函数可以用指定频率打开PC机扬声器直到用nosound().函数来关闭它;clock()函数正好用来控制发声时间,而且它不受PC机主频高低的影响。
  main ( )
  {
  int n;
  int frequency=262;
  int duration=16;
  sound(frequency);
  n=duration+clock();
  while(n>clock());
  nosound();
  }
  函数sound()带有一个参数,这个参数就是发音频率,即音高。在C语言中,音高数据可以用枚举类型来定义。各音符定义如下:
  enum SONG
  {
  C01=131,D01=147,
  E01=165,F01=175,
  G01=196,A01=220,
  B01=247,C0=262,
  D0=296,E0=330,
  F0=349,G0=392,
  A0=440,B0=494,
  C1=523,D1=587,
  E1=659,F1=698,
  G1=784,A1=880,
  B1=988,C2=1047,
  D2=1175,E2=1319,
  F2=1397,G2=1568,
  A2=1760,B2=1976
  }
  SONG类型中的C0是中央C调,这包含了四个八度音程,音长分为全音符、半音符、4分音符、8分音符、16分音符,音长用宏定义更方便一些。
  #defineL148
  /*全音符*/
  #defineL2L1/2
  /*半音符*/
  #defineL4L1/4
  /*4分音符*/
  #defineL8L1/8
  /*8分音符*/
  #defineL16L1/16
  /*16分音符*/
  根据以上定义,我们可以把音乐中各音符的音高、音长放在一个数组中,形成一段旋律,供程序调用。(湖北吕涛)