>> WINAPI入門トップに戻る

ビープ音の再生

今回はビープ音の再生について説明します。

ウィンドウズでエラーや情報のポップアップがあがった時に鳴る音ありますよね?
あれがビープ音です。
あの音もプログラミングで鳴らすことができます。

関数には、MessageBeep関数を使います。

BOOL MessageBeep(
UINT uType // サウンドタイプ
);

第一引数にはどの種類の音を鳴らすかを示すサウンドタイプを指定します。
以下のものがあります。

-1						コンピュータのスピーカから発生する標準的なビープ音
MB_ICONASTERISK			SystemAsterisk;メッセージ(情報)
MB_ICONEXCLAMATION		SystemExclamation;メッセージ(警告)
MB_ICONHAND				SystemHand;	システムエラー
MB_ICONQUESTION			SystemQuestion;メッセージ(問い合わせ)
MB_OK					SystemDefault;一般の警告音



また、Beep関数という関数もあり、
これは好きな周波数で好きな秒数の間だけ音を鳴らすことが出来ます。

BOOL Beep(
DWORD dwFreq, // 音の周波数
DWORD dwDuration // 音の持続時間
);

第一引数には音の周波数を、37~32767の間の値で指定します。
第二引数には音を鳴らす時間をミリ秒単位で指定します。

これらの関数を使って音を鳴らすコードは以下になります。

#include <windows.h>
#include <stdio.h>
#include <string.h>

#define MSG(m) {\
	MessageBoxA(NULL,m,NULL,MB_OK);}

//ウィンドウハンドル
HWND hwnd;
//インスタンスハンドル
HINSTANCE hinst;

//ウィンドウ横幅
#define WIDTH 500
#define HEIGHT 300



LRESULT CALLBACK WinProc(HWND hwnd,UINT msg,WPARAM wp,LPARAM lp)
{
	
	switch(msg){
		case WM_DESTROY:

			PostQuitMessage(0);
			return 0;

		case WM_LBUTTONDOWN:

			MessageBeep(MB_ICONASTERISK);

			return 0;

		case WM_RBUTTONDOWN:

			MessageBeep(MB_ICONHAND);

			return 0;

		case WM_KEYDOWN:

			Beep(900,2000);

			return 0;

		
	}
	return DefWindowProc(hwnd,msg,wp,lp);
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
	MSG msg;
	WNDCLASS wc;

	wc.style=CS_HREDRAW | CS_VREDRAW;
	wc.lpfnWndProc=WinProc;
	wc.cbClsExtra=wc.cbWndExtra=0;
	wc.hInstance=hInstance;
	wc.hCursor=wc.hIcon=NULL;
	wc.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
	wc.lpszClassName="test";
	wc.lpszMenuName=NULL;
	
	if(!RegisterClass(&wc)){
		MSG("クラスの登録失敗");
		return -1;
	}

	
	//インスタンスハンドル
	hinst=hInstance;

	hwnd=CreateWindowA("test","テストウィンドウ",WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,
		0,0,400,400,NULL,NULL,hInstance,NULL);


	if(hwnd==NULL){
		MSG("ウィンドウ作成失敗");
		return -1;
	}


	//エラーチェック用変数
	int check;

	while(check=GetMessage(&msg,NULL,0,0)){
		if(check==-1){
			break;
		}
		DispatchMessage(&msg);
	}

	//クラス解放
	UnregisterClass("test",hinst);

	return 0;

}

これを実行して、左クリックを押すと情報メッセージが表示されるときの音が鳴り、
右クリックを押すとシステムエラー音がなります。
また、キーボードのキーを押すと、900ヘルツの音が2秒間鳴ります。

今回の説明は以上です。
次回はwaveファイルの再生(PlaySound)について説明します。

>> 【waveファイルの再生(PlaySound)】に進む
>> WINAPI入門トップに戻る