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分音符*/ 根据以上定义,我们可以把音乐中各音符的音高、音长放在一个数组中,形成一段旋律,供程序调用。(湖北吕涛)