VC 用发音函数Beep()播放简谱音乐

来源:互联网 发布:网络架构师培训 编辑:程序博客网 时间:2024/04/20 04:52
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

 

 

再附上本人收藏的几个用Beep()播放音乐的程序,虽然音质无法与音频文件媲美,但做个小小的娱乐还是可以的:

生日快乐歌曲

[cpp] view plaincopy
  1. // 播放  生日快乐  
  2. #include <windows.h>  
  3. void main(void)     
  4. {     
  5.     unsigned FREQUENCY[] = {392,392,440,392,523,494,     
  6.         392,392,440,392,587,523,     
  7.         392,392,784,659,523,494,440,     
  8.         689,689,523,587,523};     
  9.   
  10.     unsigned DELAY[] = {375,125,500,500,500,1000,     
  11.         375,125,500,500,500,1000,     
  12.         375,125,500,500,500,500,1000,     
  13.         375,125,500,500,500,1000};     
  14.     int i;     
  15.     for (i = 0; i < 25; i++)     
  16.     {     
  17.         Beep(FREQUENCY[i], DELAY[i]);     
  18.     }     
  19. }   

小酒窝

[cpp] view plaincopy
  1. // 播放  小酒窝  
  2. #include<iostream.h>  
  3. #include<windows.h>  
  4.   
  5. enum fy{  
  6.     d1 = 262,  
  7.     d1_ = 277,  
  8.     d2 = 294,  
  9.     d2_ = 311,  
  10.     d3 = 330,  
  11.     d4 = 349,  
  12.     d5 = 392,  
  13.     d5_= 415,  
  14.     d6 = 440,  
  15.     d6_= 466,  
  16.     d7 = 494,  
  17.     z1 = 523,  
  18.     z1_ = 554,  
  19.     z2 = 578,  
  20.     z2_ = 622,  
  21.     z3 = 659,  
  22.     z4 = 698,  
  23.     z4_ = 740,  
  24.     z5 = 784,  
  25.     z5_ = 831,  
  26.     z6 = 880,  
  27.     z6_ = 932,  
  28.     z7 = 988,  
  29.     g1 = 1046,  
  30.     g1_ = 1109,  
  31.     g2 = 1175,  
  32.     g2_ = 1245,  
  33.     g3 = 1318,  
  34.     g4 = 1397,  
  35.     g4_ = 1480,  
  36.     g5 = 1568,  
  37.     g5_ = 1661,  
  38.     g6 = 1760,  
  39.     g6_ = 1865,  
  40.     g7 = 1976,  
  41.     yaya = 0  
  42. };  
  43.   
  44. struct yf  
  45. {  
  46.     enum fy s;  
  47.     int t;  
  48. };  
  49.   
  50. int main()  
  51. {  
  52.     int n = 0;  
  53.   
  54.     struct yf a[1000]={{z3,125},{z3,50},{z4,100},{z3,50},{z2,50}, //5  
  55.     {z2,125},{z2,50},{z5,100},{z2,50},{z1,50}, //10  
  56.     {z1,125},{z1,50},{z6,100},{z5,100},    //14  
  57.     {z3,125},{z4,25},{z3,25},{z2,100},{z2,100}, //19  
  58.     {z3,125},{z3,50},{z4,100},{z5,50},{z3,50}, //24  
  59.     {z5,125},{z5,50},{g2,100},{z7,50},{g1,50}, //29  
  60.     {g1,200},{g1,50},{z7,50},{z6,50},{z7,50}, //34  
  61.     {g1,125},{z7,50},{g1,200},      //37  
  62.     {g1,50},{z7,50},{g1,50},{z7,50},{g1,100},{z3,50},{z5,50}, //44  
  63.     {z5,250},{z6,50},{z7,50},      //47  
  64.     {g1,50},{z7,50},{g1,50},{z7,50},{g1,100},{g2,100},{g3,100}, //54  
  65.     {g3,300},{z6,50},{z7,50},   //57  
  66.     {g1,50},{z7,50},{g1,50},{z7,50},{g1,100},{g3,100}, //63  
  67.     {z7,50},{z6,50},{z7,50},{z6,50},{z7,50},{z5,50},{z5,50},{g1,50}, //71  
  68.     {g1,200},{g3,75},{g4,25},{g4,50},{g3,50}, //76  
  69.     {g2,200},{yaya,50},{z5,50},{g1,50},{g2,50}, //81  
  70.     {g3,50},{g1,50},{g1,50},{z5,50},{z5,100},{z5,50},{g3,50}, //88  
  71.     {g2,50},{g3,50},{g2,50},{g1,50},{z5,50},{z5,50},{z6,50},{z7,50}, //96  
  72.     {g1,50},{z6,50},{z6,50},{z3,50},{z3,100},{yaya,50},{z7,50}, //103  
  73.     {g1,50},{z7,50},{g1,50},{g2,50},{z6,50},{z5,50},{z5,100}, //110  
  74.     {z6,100},{z5,50},{z6,50},{z7,100},{g3,50},{g4,50}, //116  
  75.     {g3,50},{g4,50},{g3,50},{g2,50},{g2,50},{g1,100},{z5,50}, //123  
  76.     {z5,50},{z4,50},{z4,50},{g1,50},{g1,50},{g3,50},{g3,50},{g1,50}, //131  
  77.     {g2,200},{yaya,50},{z5,50},{g1,50},{g2,50}, //136  
  78.     {g3,50},{g1,50},{g1,50},{z5,50},{z5,100},{z5,50},{g3,50}, //143  
  79.     {g2,50},{g3,50},{g2,50},{g1,50},{z5,50},{z5,50},{z6,50},{z7,50}, //151  
  80.     {g1,50},{z6,50},{z6,50},{z3,50},{z3,100},{z3,50},{z7,50}, //158  
  81.     {g1,50},{z7,50},{g1,50},{g2,50},{z6,50},{z5,50},{z5,100}, //165  
  82.     {z6,50},{z7,50},{g1,50},{g2,100},{g3,50},{g4,50}, //171  
  83.     {g3,50},{g4,50},{g2,50},{g1,50},{g2,50},{g1,50},{g1,100}, //178  
  84.     {g2,50},{g1,50},{g2,50},{z6,50},{g1,100},{g2,50},{g1,50}, //185  
  85.     {g1,400},   //186  
  86.     {g2,50},{g1,50},{g2,50},{z6,50},{z7,100},{z7,50},{g1,50}, //193  
  87.     {g1,400},   //194  
  88.     };  
  89.   
  90.     struct yf *atop;  
  91.     atop = a;  
  92.     n = 194;  
  93.   
  94.     while(n--)  
  95.     {  
  96.         Beep(atop->s,atop->t*5);  
  97.         atop++;  
  98.     }  
  99.     return 0;  
  100. }  

  101. 转载:点击打开链接