C语言音乐程序设计

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