1
C语言程序设计
1.11.3.2 10.3.2 音乐

10.3.2 音乐

音乐中包含两个主要的因素:如何表示音符(即音高);如何控制音符的持续时间(即音长)。

1.音符的定义

音调由音符构成,音调的高低由音符频率决定,频率越高,音调也越高。音乐中使用的频率一般为131~1976Hz,它包括了中央C调及其前后的4个八度的音程。各音符与频率的对应关系如表10.3.1所示。

表10.3.1 音符与频率

img759

注 C*为中央C调

程序中用C语言的枚举类型常量定义各音符的频率值,读者可以根据上表中的频率关系值的对应关系求出高八度的C、D、E的频率大致为2091、2350、2638,然后再进行适当的调整即可。

2.音长定义

音长即一个音符的持续时间。程序员可以根据演奏的乐曲速度灵活设置全音符、半音符、4分音符等时间的长短。

3.音乐的定义

设有如下两小段乐谱:img760

如何用C语言的方式来表示乐谱呢?从枚举类型的定义可以看到,几个八度的音符频率已经确定,则各音调与简谱的对应关系已经确定,如表10.3.2所示。

表10.3.2 乐谱与C对照表

img761

从乐谱中可以对应出C语言的“乐谱”如下:

第一小节:D0,N4+N8,E0,N16,D0,N16,C0,N4+N8,A0,N8

第二小节:G10,N4,E10,N8,G10,N8,A10,N4+N8,C0,N16

我们可以将音调与简谱的对应关系列举出来,根据音乐乐谱列出C语言的“乐谱”并形成一个文件,即乐曲文件。当程序需要音乐时,程序将文件调到内存中,按文件的规定顺序播放即可。