C语言里自带了函数Beep(),
它的声明如下:
bool Beep(DWORD Freq,DWORD Duration);
该函数调用机箱喇叭(扬声器)发出指定音高长度的声音
Freq代表声音的频率,单位是赫兹
Duration代表声音的长度,单位是毫秒
如果我们想发出现在音乐的乐音,该如何做呢?
我们知道音高在音乐中的最小划分是半音,我们把一倍音程平均划分成12个半音,
因此每个音的频率数列是一个等比数列
公比r=2^(1/12)=1.05946309411451
现代标准音A4的频率通常为440Hz,实际音乐会的时候也会定音为442Hz或者443Hz
知道了这些参数,我们可以写出求任意音名音高的函数,
首先定义一个枚举类型 pitch,
enum pitch {
C, Cs, D, Ds, E, F, Fs, G, Gs, A, As, B, X
};
<span style="white-space:pre"> </span>typedef pitch pitch_t;
这里面定义了12个半音的名称,其中s代表sharp,即升音#
其中X代表空音符,用于以后的扩展
求得音高的程序很简单,如下
首先定义两个常量,即之前提到的标准音高和公比
#define A4_PITCH 440
#define MUSIC_RATIO 1