<<Back To index
CEasySoundクラス リファレンスマニュアル
■概要 DirectSoundを簡単に使うためのクラスです。実際に再生するデータ(セカンダリバッファ)はクラスの外に出ているので、いくつ使おうがプログラマの自由です。クラスでは主に、初期化、データの読み込み、再生、解放を行います。 ■用語説明 □プライマリバッファ 直接サウンドカードが再生するデータを保持するバッファです。サウンドの合成などは、プライマリバッファ上で、DirectXが行います。通常、プログラマはセカンダリバッファを使い、プライマリバッファに直接アクセスする事はありません。 EasySoundでは、内部的にプライマリバッファを持ちます。プログラマがプライマリバッファの存在を意識する必要はありません。 □セカンダリバッファ 再生する効果音などのデータを保持するバッファです。プログラマは、使う効果音の分だけセカンダリバッファを用意し、データをロード、再生用のメソッドを呼ぶことで、サウンドの再生をします。複数のセカンダリバッファを同時に再生した場合、サウンドはプライマリバッファ上で合成されます。 EasySoundでは、セカンダリバッファを外部に持つことにしています。プログラマは好きなだけ(ハードの許す限り)セカンダリバッファを持つことが出来ます(同じサウンドの場合、内容を共有してメモリ使用量を抑える事もできます)。 ■メンバ関数 □初期化 bool InitDxSound(HWND hWnd,int nChannel,int nSps,int nBps); □セカンダリバッファを作る bool MakeSoundBuffer(LPDIRECTSOUNDBUFFER &pDSData,int nResID); □再生 bool PlaySE(LPDIRECTSOUNDBUFFER &pDSData); □解放 void ReleaseBuffer(LPDIRECTSOUNDBUFFER &pDSData); □DirectSoundオブジェクトの取得 LPDIRECTSOUND GetDirectSound(); □初期化 bool InitDxSound(HWND hWnd,int nChannel,int nSps,int nBps); 引数 HWND hWnd ウィンドウハンドルです。初期化に必要なので、必ず渡してください。 int nChannel チャンネル数です。ステレオの場合で、2になります。普通は2を指定すれば良いと思います。 int nSps サンプリングレートです。CDクォリティで44100Hzを指定します。ゲームの効果音なら22050Hzで十分です。実際に効果音に使うWAVEファイルも、このレートに合わせて作成してください。 int nBps ビット深度です。CDクォリティで32bitです。ゲームの効果音なら16bitで十分です。実際に効果音に使うWAVEファイルも、このレートに合わせて作成してください。 戻り値 bool型 失敗>false 成功>true 解説 DirectSoundを初期化します。ウィンドウハンドル、サンプリングレート、ビット深度を指定してください。失敗するとfalseを返します。成功しない限り、他のメンバ関数は使えません。 使用例 CEasySound MySound;//EasySoundオブジェクト MySound.InitDxSound(hWnd,2,22050,16);//初期化 □セカンダリバッファを作る bool MakeSoundBuffer(LPDIRECTSOUNDBUFFER &pDSData,int nResID); 引数 LPDIRECTSOUNDBUFFER &pDSData セカンダリバッファのアドレスです。作成したセカンダリバッファのポインタを、ここに格納します。 int nResID 音源のWAVEリソースIDです。WAVEファイルを元にセカンダリバッファを作るため、必要です。 戻り値 bool型 失敗>false 成功>true 解説 セカンダリバッファを作ります。効果音一つにつき、一つのセカンダリバッファが必要です。同じ音を再生する場合でも、セカンダリバッファが一つ必要になります。 使用例 CEasySound MySound;//EasySoundオブジェクト LPDIRECTSOUNDBUFFER pDsoundData;//セカンダリバッファ //初期化とかいろいろ..... MySound.MakeSoundBuffer(pDsoundData,IDR_WAVE_LEFT);//バッファを初期化&WAVEを登録 □再生 bool PlaySE(LPDIRECTSOUNDBUFFER &pDSData); 引数 LPDIRECTSOUNDBUFFER &pDSData CEasySound::MakeSoundBuffer()で作成したセカンダリバッファのポインタ。 戻り値 bool型 失敗>false 成功>true 解説 セカンダリバッファの内容を再生します。同時に複数の効果音を鳴らすことも出来ます。失敗するとfalseを返します。 使用例 CEasySound MySound;//EasySoundオブジェクト LPDIRECTSOUNDBUFFER pDsoundData;//セカンダリバッファ //初期化とかいろいろ..... MySound.PlaySE(pDsoundData);//再生 □解放 void ReleaseBuffer(LPDIRECTSOUNDBUFFER &pDSData); 引数 LPDIRECTSOUNDBUFFER &pDSData CEasySound::MakeSoundBuffer()で作成したセカンダリバッファのアドレス。 戻り値 なし 解説 セカンダリバッファを解放します。 使用例 MySound.ReleaseBuffer(pDsoundData); □DirectSoundオブジェクトの取得 LPDIRECTSOUND GetDirectSound(); 引数 なし 戻り値 LPDIRECTSOUND型 解説 DirectSoundオブジェクトのポインタを返します。EasyMusicの初期化などで必要になります。 使用例 CEasySound MySound;//EasySoundオブジェクト CEasyMusic MyMusic;//EasyMusicオブジェクト MyMusic.InitDxMusic(MySound.GetDirectSound(),"");//EasyMusicの初期化 ■サンプルソース //------------------------------------------------------------------ // sound.cpp : CEasySoundサンプルプログラム // //------------------------------------------------------------------ //内容 // DirectSoundの初期化、WAVEのロード、再生、停止、多重再生、解放の //サンプルです。EasySound3Dをつかっています。 //------------------------------------------------------------------ #include "stdafx.h" #include "resource.h" #include "EasySound.h" #include "EasySound3D.h" HRESULT CALLBACK WinProc(HWND, UINT, WPARAM, LPARAM);//メッセージ処理 CEasySound3D MySound3D;//EasySound3Dオブジェクト SOUND_DATA_3D pDsoundDataLeft,pDsoundDataCenter,pDsoundDataRight; //--------------------------------------------------- //関数名 WinMain() //機能 メイン関数 //--------------------------------------------------- int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow ) { WNDCLASSEX wndclass;//ウィンドウクラス HWND hWnd; // ウインドウハンドル MSG msg; //メッセージ // ウインドウクラスの生成 ZeroMemory( &wndclass, sizeof( wndclass)); wndclass.style = 0; wndclass.lpfnWndProc = WinProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance; wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wndclass.lpszClassName = "Easy Lib Test"; wndclass.cbSize = sizeof(WNDCLASSEX); if( !RegisterClassEx( &wndclass)) { MessageBox(NULL,"ウィンドウのレジストに失敗。","Error",MB_OK|MB_ICONEXCLAMATION); return 0; } // ウインドウの生成 hWnd = CreateWindowEx(WS_EX_APPWINDOW,"Easy Lib Test","Easy Lib Test",WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT,640,480,HWND_DESKTOP, NULL,hInstance, NULL); ShowWindow( hWnd,SW_SHOW); UpdateWindow( hWnd); //EasySound初期化 if(!MySound3D.InitDxSound(hWnd,2,22050,16)) { MessageBox(hWnd,"DirectSoundの初期化に失敗","Error",NULL); PostQuitMessage(0); } //Waveをロード&セカンダリバッファを作成 MySound3D.MakeSoundBuffer(pDsoundDataLeft,IDR_WAVE1); MySound3D.MakeSoundBuffer(pDsoundDataCenter,IDR_WAVE2); MySound3D.MakeSoundBuffer(pDsoundDataRight,IDR_WAVE3); // メイン メッセージ ループ: while(TRUE) { if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { if (msg.message == WM_QUIT){ PostQuitMessage(msg.wParam); return 0; } TranslateMessage( &msg ); DispatchMessage( &msg ); } } return 0; } //--------------------------------------------------- //関数名 WinProc() //機能 メイン ウィンドウのメッセージを処理します。 //--------------------------------------------------- HRESULT CALLBACK WinProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch(message) { case WM_DESTROY://終了処理 //セカンダリバッファを解放 MySound3D.ReleaseBuffer(pDsoundDataLeft); MySound3D.ReleaseBuffer(pDsoundDataCenter); MySound3D.ReleaseBuffer(pDsoundDataRight); PostQuitMessage(0); break; case WM_KEYDOWN: switch(wParam){ case 'Z': MySound3D.PlaySE(pDsoundDataLeft,-3,0,0);//ぐっじょぶ再生 break; case 'X': MySound3D.PlaySE(pDsoundDataCenter,0,0,0);//ぐれぃと再生 break; case 'C': MySound3D.PlaySE(pDsoundDataRight,3,0,0);//やったぁ再生 break; } break; case WM_PAINT:{ char strBuff[128]; PAINTSTRUCT rPaintRect; HDC hDC = BeginPaint(hWnd, &rPaintRect); sprintf(strBuff, "ぐっじょぶ! 再生[Z]"); TextOut(hDC,0,0,strBuff,strlen(strBuff)); sprintf(strBuff, "ぐれぃと! 再生[X]"); TextOut(hDC,0,20,strBuff,strlen(strBuff)); sprintf(strBuff, "やったぁ! 再生[C]"); TextOut(hDC,0,40,strBuff,strlen(strBuff)); EndPaint(hWnd, &rPaintRect); } default: return DefWindowProc( hWnd, message, wParam, lParam ); } return 0; } タブは全角スペースになってます。ビルドするためには、プロジェクトにEasySound.hとEasySound.cppを追加して、dxguid.lib、dsound.libをリンクしてください。当然ですが、DirectX7のSDKが必要になりますので、別途入手してください。 stdafx.hでは、windows.h、stdlib.h、malloc.h、memory.h、tchar.h、stdio.h、time.hをインクルードしていますが、多分全部は必要ないです。 written by Matsumoto keizi
|