Win32 API中有个非常有趣的发音函数Beep(),可以用它在扬声器上播放简单的音调,如果按简谱来设置播放的内容,就可以播放出部分简单的音乐。
函数原型:
BOOL WINAPI Beep(
__in DWORD dwFreq,
__in DWORD dwDuration
);
函数说明:
第一个参数表示频率,用Hz为单位,可以在0x25到0x7FFF之间。
第二个参数表示持续的时间,以毫秒为单位。
与这个函数类似的是:
BOOL WINAPI MessageBeep(
__in UINT uType
);
这个函数使用要广泛的多。相当多的程序在MessageBox()之前都会调用MessageBeep()来发出一些提示音(实际上是播放系统音乐文件)。
可供选择的参数有:
MB_ICONASTERISK
0x00000040L
|
SystemAsterisk
|
MB_ICONEXCLAMATION
0x00000030L
|
SystemExclamation
|
MB_ICONHAND
0x00000010L
|
SystemHand 警告音
|
MB_ICONQUESTION
0x00000020L
|
SystemQuestion
|
MB_OK
0x00000000L
|
SystemDefault
|
(这个必须转载- - 转载请注明:http://blog.sina.com.cn/s/articlelist_1803561601_0_1.html)
再附上本人收藏的几个用Beep()播放音乐的程序,虽然音质无法与音频文件媲美,但做个小小的娱乐还是可以的:
// 播放 生日快乐
#include <windows.h>
void main(void)
{
unsigned FREQUENCY[] = {392,392,440,392,523,494,
392,392,440,392,587,523,
392,392,784,659,523,494,440,
689,689,523,587,523};
unsigned DELAY[] = {375,125,500,500,500,1000,
375,125,500,500,500,1000,
375,125,500,500,500,500,1000,
375,125,500,500,500,1000};
int i;
for (i = 0; i < 25; i++)
{
Beep(FREQUENCY[i], DELAY[i]);
}
}
#include<iostream.h>
#include<windows.h>
enum fy{
d1 = 262,
d1_ = 277,
d2 = 294,
d2_ = 311,
d3 = 330,
d4 = 349,
d5 = 392,
d5_= 415,
d6 = 440,
d6_= 466,
d7 = 494,
z1 = 523,
z1_ = 554,
z2 = 578,
z2_ = 622,
z3 = 659,
z4 = 698,
z4_ = 740,
z5 = 784,
z5_ = 831,
z6 = 880,
z6_ = 932,
z7 = 988,
g1 = 1046,
g1_ = 1109,
g2 = 1175,
g2_ = 1245,
g3 = 1318,
g4 = 1397,
g4_ = 1480,
g5 = 1568,
g5_ = 1661,
g6 = 1760,
g6_ = 1865,
g7 = 1976,
yaya = 0
};
struct yf
{
enum fy s;
int t;
};
int main()
{
int n = 0;
struct yf a[1000]={{z3,125},{z3,50},{z4,100},{z3,50},{z2,50}, //5
{z2,125},{z2,50},{z5,100},{z2,50},{z1,50}, //10
{z1,125},{z1,50},{z6,100},{z5,100}, //14
{z3,125},{z4,25},{z3,25},{z2,100},{z2,100}, //19
{z3,125},{z3,50},{z4,100},{z5,50},{z3,50}, //24
{z5,125},{z5,50},{g2,100},{z7,50},{g1,50}, //29
{g1,200},{g1,50},{z7,50},{z6,50},{z7,50}, //34
{g1,125},{z7,50},{g1,200}, //37
{g1,50},{z7,50},{g1,50},{z7,50},{g1,100},{z3,50},{z5,50}, //44
{z5,250},{z6,50},{z7,50}, //47
{g1,50},{z7,50},{g1,50},{z7,50},{g1,100},{g2,100},{g3,100}, //54
{g3,300},{z6,50},{z7,50}, //57
{g1,50},{z7,50},{g1,50},{z7,50},{g1,100},{g3,100}, //63
{z7,50},{z6,50},{z7,50},{z6,50},{z7,50},{z5,50},{z5,50},{g1,50}, //71
{g1,200},{g3,75},{g4,25},{g4,50},{g3,50}, //76
{g2,200},{yaya,50},{z5,50},{g1,50},{g2,50}, //81
{g3,50},{g1,50},{g1,50},{z5,50},{z5,100},{z5,50},{g3,50}, //88
{g2,50},{g3,50},{g2,50},{g1,50},{z5,50},{z5,50},{z6,50},{z7,50}, //96
{g1,50},{z6,50},{z6,50},{z3,50},{z3,100},{yaya,50},{z7,50}, //103
{g1,50},{z7,50},{g1,50},{g2,50},{z6,50},{z5,50},{z5,100}, //110
{z6,100},{z5,50},{z6,50},{z7,100},{g3,50},{g4,50}, //116
{g3,50},{g4,50},{g3,50},{g2,50},{g2,50},{g1,100},{z5,50}, //123
{z5,50},{z4,50},{z4,50},{g1,50},{g1,50},{g3,50},{g3,50},{g1,50}, //131
{g2,200},{yaya,50},{z5,50},{g1,50},{g2,50}, //136
{g3,50},{g1,50},{g1,50},{z5,50},{z5,100},{z5,50},{g3,50}, //143
{g2,50},{g3,50},{g2,50},{g1,50},{z5,50},{z5,50},{z6,50},{z7,50}, //151
{g1,50},{z6,50},{z6,50},{z3,50},{z3,100},{z3,50},{z7,50}, //158
{g1,50},{z7,50},{g1,50},{g2,50},{z6,50},{z5,50},{z5,100}, //165
{z6,50},{z7,50},{g1,50},{g2,100},{g3,50},{g4,50}, //171
{g3,50},{g4,50},{g2,50},{g1,50},{g2,50},{g1,50},{g1,100}, //178
{g2,50},{g1,50},{g2,50},{z6,50},{g1,100},{g2,50},{g1,50}, //185
{g1,400}, //186
{g2,50},{g1,50},{g2,50},{z6,50},{z7,100},{z7,50},{g1,50}, //193
{g1,400}, //194
};
struct yf *atop;
atop = a;
n = 194;
while(n--)
{
Beep(atop->s,atop->t*5);
atop++;
}
return 0;
}