PC喇叭发声就是需要控制硬件的声调和延时,让其发出对应的声音,可用来对外界产生测试声音源。注意:使PC喇叭发声是绕过声卡的,也就是说就算计算机上没有声卡,该操作也可完成。
(1)新建一个MFC对话框,并且安置七个按钮,分别表示声调的7个阶,每个按钮的操作函数如下:
void CSpeakerbeepDlg::OnOne()
{
Beep(264,500); //频率(单位赫兹),延时(单位毫秒)
}
void CSpeakerbeepDlg::OnTwo()
{
Beep(296,500);
}
void CSpeakerbeepDlg::OnThree()
{
Beep(330,500);
}
void CSpeakerbeepDlg::OnFour()
{
Beep(349,500);
}
void CSpeakerbeepDlg::OnFive()
{
Beep(392,500);
}
void CSpeakerbeepDlg::OnSix()
{
Beep(440,500);
}
void CSpeakerbeepDlg::OnSeven()
{
Beep(494,500);
}
以上按钮即可实现驱使PC喇叭发出音阶的声音
(2)如果还想利用PC小键盘上的数字键,快捷的控制PC喇叭发声。则需要用到处理PreTranslateMessage这个消息处理。在MFC中,PreTranslateMessage是虚函数,我们可以重载它来处理键盘和鼠标消息。该函数表示在消息处理(TranslateMessge()和DispatchMessage()等)前所作的操作,如果函数返回值为TRUE,那么消息处理即终止,不会调用TranslateMessge()和DispatchMessage()来翻译和分发消息给相应的窗口;若返回值为FALSE,才会调用翻译和分发消息函数。
在类向导中添加这个消息,然后开始该消息处理。如下:
BOOL CSpeakerbeepDlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message==WM_KEYDOWN && pMsg->wParam>VK_NUMPAD1)
{
this->OnOne(); //this指向当前应用程序指针
}
if (pMsg->message==WM_KEYDOWN && pMsg->wParam>VK_NUMPAD2)
{
this->OnTwo();
}
if (pMsg->message==WM_KEYDOWN && pMsg->wParam>VK_NUMPAD3)
{
this->OnThree();
}
if (pMsg->message==WM_KEYDOWN && pMsg->wParam>VK_NUMPAD4)
{
this->OnFour();
}
if (pMsg->message==WM_KEYDOWN && pMsg->wParam>VK_NUMPAD5)
{
this->OnFive();
}
if (pMsg->message==WM_KEYDOWN && pMsg->wParam>VK_NUMPAD6)
{
this->OnSix();
}
if (pMsg->message==WM_KEYDOWN && pMsg->wParam>VK_NUMPAD7)
{
this->OnSeven();
}
return CDialog::PreTranslateMessage(pMsg);
}
按不同的数字键,即可发出连续的音阶声,数字越大发出的音阶声越完整。