0. 引言
放图:
显而易见了(
注意:该函数只存在于 Windows 系统下的 windows.h 中,而 windows.h 不存在于 bits/stdc++.h 中。
1. 什么是 Beep()
Beep()
是 windows.h 下的一个用于发声的函数。函数原型:
BOOL Beep(
DWORD dwFreq;
DWORD dwDuration;
);
其中的 dwFreq
是发声频率(单位 Hz),而 dwDuration
是发声时长(单位 ms)。
2. Beep() 的意义
用于游戏中的发声,使得游戏内容丰富生动,具有立体感。
3. 怎么用 Beep()
我们既然已经知道了第一个参数是发声频率,我们要如何获取
⋯
,
1
.
,
2
.
,
⋯
,
7
.
,
1
,
2
,
⋯
,
7
,
1
˙
,
2
˙
,
⋯
\cdots,1\kern{-4px}\raisebox{-3px}{. },2\kern{-4px}\raisebox{-3px}{. },\cdots,7\kern{-4px}\raisebox{-3px}{. },1,2,\cdots,7,\dot{1},\dot{2},\cdots
⋯,1. ,2. ,⋯,7. ,1,2,⋯,7,1˙,2˙,⋯ 甚至
♯
2
,
♭
4
^\sharp 2,^\flat\!4
♯2,♭4 等的频率呢?
目前网络上主要流行以下这段宏定义代码,可以满足一般的需要:
//q前缀为低音,p后缀为高音,s前缀为半音阶
#define qdo 262
#define qre 294
#define qmi 330
#define qfa 349
#define qso 392
#define qla 440
#define qsi 494
#define do 523//一般情况下 do 建议改为 do_, DO, Do 等非关键字的内容
#define re 578
#define mi 659
#define fa 698
#define so 784
#define la 880
#define si 988
#define dop 1046
#define rep 1175
#define mip 1318
#define fap 1480
#define sop 1568
#define lap 1760
#define sip 1976
#define sqdo 277
#define sqre 311
#define sqfa 370
#define sqso 415
#define sqla 466
#define sdo 554
#define sre 622
#define sfa 740
#define sso 831
#define sla 932
#define sdop 1046
#define srep 1245
#define sfap 1480
#define ssop 1661
#define slap 1865
那用起来也是很方便,比如
1
.
1\kern{-4px}\raisebox{-3px}{. }
1. 对应 qdo
,
4
˙
\dot{4}
4˙ 对应 fap
,
♯
2
^\sharp 2
♯2 和
♭
3
^\flat 3
♭3 非特殊情况下均可以是 sre
。
而对于节拍,一般情况下,为了方便,四分音符为一拍是
400
∼
500
ms
400\sim500\text{ms}
400∼500ms。
至于休止符,将会用到以后讲的 Sleep()
。
4. 举例
比如一下这段简谱:
1
1
‾
4.
‾
5
‾
‾
∣
1.
‾
4
‾
‾
1
˙
∣
♯
1
˙
4
5
‾
∣
1
˙
−
∣
4
−
\underline{1\ 1}\ \underline{4.}\underline{\underline{5}}\ |\ \underline{1.}\underline{\underline{4}}\ \dot{1}\ |\ ^\sharp\dot{1}\ \underline{4\ 5}\ |\ \dot{1}\ -\ |\ 4\ -
1 1 4.5 ∣ 1.4 1˙ ∣ ♯1˙ 4 5 ∣ 1˙ − ∣ 4 −
我们可以这么写:
Beep(do,250);
Beep(do,250);
Beep(fa,375);
Beep(so,125);
Beep(do,375);
Beep(fa,125);
Beep(dop,500);
Beep(sdop,500);
Beep(fa,250);
Beep(so,250);
Beep(dop,1000);
Beep(fa,1000);
散发着臭的进行曲(
那最后向读者们展示一份代码,运行后猜猜看这是什么音乐,欢迎把答案留在评论区~
for(int i=1;i<=2;i++)
{
Beep(fa,500);
Beep(si,500);
Beep(la,500);
Beep(so,1000);
Beep(fa,500);
Beep(la,500);
Beep(so,500);
Beep(fa,500);
Beep(si,500);
Beep(la,500);
Beep(so,500);
Beep(fa,500);
Beep(la,500);
Beep(fa,1000);
Beep(fa,500);
Beep(si,500);
Beep(la,500);
Beep(so,1000);
Beep(fa,500);
Beep(la,500);
Beep(so,500);
Beep(fa,2000);
Beep(so,1000);
Beep(la,1000);
}
Beep(fa,500);
Beep(si,500);
Beep(la,500);
Beep(so,1000);
Beep(fa,250);
Beep(so,250);
Beep(fa,250);
Beep(so,250);
Beep(fa,250);
Beep(so,250);
Beep(fa,500);
Beep(si,500);
Beep(la,500);
Beep(so,500);
Beep(fa,500);
Beep(la,250);
Beep(so,250);
Beep(fa,1000);
Beep(fa,500);
Beep(si,500);
Beep(la,500);
Beep(so,1000);
Beep(fa,250);
Beep(so,250);
Beep(la,250);
Beep(so,250);
Beep(fa,250);
Beep(so,250);
Beep(fa,2000);
Beep(so,1000);
Beep(la,1000);
Beep(so,500);
Beep(si,125);
Beep(la,125);
Beep(si,125);
Beep(la,500);
Beep(so,1000);
Beep(fa,250);
Beep(so,250);
Beep(so,250);
Beep(fa,250);
Beep(fa,250);
Beep(so,250);
Beep(fa,500);
Beep(si,125);
Beep(la,125);
Beep(si,125);
Beep(la,500);
Beep(so,500);
Beep(fa,500);
Beep(la,250);
Beep(so,250);
Beep(fa,1000);
Beep(fa,500);
Beep(so,125);
Beep(so,125);
Beep(so,125);
Beep(so,500);
Beep(la,500);
Beep(si,500);
Beep(fa,250);
Beep(so,250);
Beep(la,250);
Beep(so,250);
Beep(fa,250);
Beep(so,250);
Beep(fa,2000);
5. 后记
文不长,但希望读者可以理解。