DirectXで遊ぼう 上のページ

IDirectSound
  1. 概要

    DirectSoundの最も中心となるオブジェクトです。
    実際の再生に用いるIDirectSoundBufferオブジェクトを生成したり、排他レベルを設定したりする物です。

    以下の内容について解説します。


  2. サンプルプログラム

    以下は、IDirectSoundを生成する為のコードです。
    実際の動作の解説については、この後行います。
    IDirectSoundは、DirectSoundCreateという関数を使って生成を行います。

    LPDIRECTSOUND dsound;           // IDirectSoundのポインタ
    HRESULT r;                      // 関数の返値
    
    r = DirectSoundCreate(NULL,&ddraw,NULL);
    if(r != DD_OK){
        //
        // IDirectSound生成失敗(r:エラーコード)
        //
    }
    
    r = dsound->SetCooperativeLevel(hwnd,DSSCL_NORMAL);
    if(r != DD_OK){
        ddraw->Release();
    
        //
        // SetCooperativeLevel失敗(r:エラーコード)
        //
    }
    
    DirectDrawに比べて、DirectSoundの初期化はこのように非常に簡単です。

  3. IDirectSoundを生成する

    DirectSoundCreate関数を使用します。
    この関数に与えるパラメータは、通常はオブジェクトを格納する領域を渡すだけで良いです。
    生成されたIDirectSoundは、後のDirectSoundの制御に使うポインタとなります。
    LPDIRECTSOUND dsound;           // IDirectSoundのポインタ
    HRESULT r;                      // 関数の返値
    
    r = DirectSoundCreate(NULL,&ddraw,NULL);
    if(r != DD_OK){
        //
        // IDirectSound生成失敗(r:エラーコード)
        //
    }
    
    DirectSoundCreateの返値がDD_OKになると、正しくオブジェクトが生成した事になります。

  4. 制御レベルを設定する

    次に必要なのは、排他レベルとウィンドゥハンドルを指定する事です。
    排他レベルですけど、特殊な用途でもない限りはDSSCL_NORMALで事足ります。
    r = dsound->SetCooperativeLevel(hwnd,DSSCL_NORMAL);
    if(r != DD_OK){
        ddraw->Release();
    
        //
        // SetCooperativeLevel失敗(r:エラーコード)
        //
    }
    

  5. DirectSoundを開放する

    IDirectDrawと同様にこれはCOMモデルですので、Releaseする事でDirectSoundは開放できます。
    dsound->Release();
    



上のページ