控制PC喇叭发声

来源:互联网 发布:淘宝新店一个月没销量 编辑:程序博客网 时间:2024/05/17 02:50

      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);
}

按不同的数字键,即可发出连续的音阶声,数字越大发出的音阶声越完整。

 

原创粉丝点击