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);
}
按不同的數字鍵,即可發出連續的音階聲,數字越大發出的音階聲越完整。