C语言使用系统声音制作很lou的音乐键盘

时间:2021-11-19 17:04:57

Win32 API中有个非常有意思的发音函数Beep(),可以用它在扬声器上播放简单的音调,如果按简谱来设置播放的内容,就可以模拟音乐的播放

  1. BOOL WINAPI Beep(
  2.   __in          DWORD dwFreq,
  3.   __in          DWORD dwDuration
  4. );


函数说明
第一个参数:频率,用Hz为单位,可以在0x25到0x7FFF之间。
第二个参数:持续的时间,单位[毫秒]。

与这个函数类似的是:
  1. BOOL WINAPI MessageBeep(
  2.   __in          UINT uType
  3. );
复制代码
这个函数使用要广泛的多。相当多的程序在MessageBox()之前都会调用MessageBeep()来发出一些提示音(实际上是播放系统音乐文件)。
下面我们来用beep()函数来造一个音乐键盘 不过很lou

#include<iostream>

#include<windows.h>
#include<conio.h>
using namespace std;
enum fy
{
d1 = 131, d1_ = 139, d2 = 147, d2_ = 156, d3 = 165, d4 = 175, d4_ = 185, d5 = 196, 
d5_ = 208, d6 = 220, d6_ = 233, d7 = 247,
z1 = 262, z1_ = 277, z2 = 294, z2_ = 311, z3 = 330, z4 = 349, z4_ = 367, z5 = 392,
z5_ = 415, z6 = 440, z6_ = 466, z7 = 494,
g1 = 523, g1_ = 554, g2 = 578, g2_ = 622, g3 = 659, g4 = 698, g4_ = 740, g5 = 784, 
g5_ = 831, g6 = 880, g6_ = 932, g7 = 988,
c1 = 1046,c1_ = 1109, c2 = 1175, c2_ = 1245, c3 = 1318, c4 = 1397, c4_ = 1480, c5 = 1568, 
c5_ = 1661, c6 = 1760, c6_ = 1865, c7 = 1976, yaya = 0
};


struct yf
{
enum fy s;
int t;
};


int main()
{
int num;
while (true)
{
FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));
switch (getch())
{
case 'z':
num = d1;
break;
case 'x':
num = d2;
break;
case 'c':
num = d3;
break;
case 'v':
num = d4;
break;
case 'b':
num = d5;
break;
case 'n':
num = d6;
break;
case 'm':
num = d7;
break;
case ',':
num = z1;
break;
case '.':
num = z2;
break;
case '/':
num = z3;
break;
case 'a':
num = z1;
break;
case 's': 
num = z2;
break;
case 'd': 
num = z3;
break;
case 'f': 
num = z4;
break;
case 'g': 
num = z5;
break;
case 'h': 
num = z6;
break;
case 'j':
num = z7;
break;
case 'k':
num = g1;
break;
case 'l':
num = g2;
break;
case ';':
num = g3;
break;
case '\'':
num = g4;
break;
case 'q':
num = g1;
break;
case 'w':
num = g2;
break;
case 'e':
num = g3;
break;
case 'r':
num = g4;
break;
case 't':
num = g5;
break;
case 'y':
num = g6;
break;
case 'u':
num = g7;
break;
case 'i':
num = c1;
break;
case 'o':
num = c2;
break;
case 'p':
num = c3;
break;
case '[':
num = c4;
break;
case ']':
num = c5;
break;
case '\\':
num = c6;
break;
default:
num = yaya;
break;
}
Beep(num,500);
}


return 0;
}