「C++小游戏教程」基本技巧(3)——发声函数 Beep()
0. 引言
- 「C++小游戏教程」基本技巧(1)——随机化
- 「C++小游戏教程」基本技巧(2)——系统 DOS 命令
放图:

显而易见了(
注意:该函数只存在于 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. 后记
文不长,但希望读者可以理解。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
