次の方法で共有


DirectSound プログラミングの第一歩

ここでは、DirectSound API を使ってサウンドを再生するために、実行しなければならない手順の概要について説明する。詳細については、「DirectSound の使い方」を参照すること。

短いサウンドを再生するには、以下の手順が必要である。

1. デバイス オブジェクトを作成する

DirectSoundCreate8 を呼び出して、IDirectSound8 インターフェイスをサポートするオブジェクトを作成する。このオブジェクトは、普通、デフォルトの再生デバイスを表す。オプションとして、最初に利用可能なデバイスを列挙し、使用するデバイスの GUID を取得して DirectSoundCreate8 に渡してもかまわない。

DirectSound は Component Object Model (COM) に基づいている。ただし、エフェクト DMO を使うのでない限り、COM を明示的に初期化する必要はない。

2. セカンダリ バッファを作成する

IDirectSound8::CreateSoundBuffer を使って、サウンド データを保持するバッファ オブジェクトを作成する。このようなバッファは、すべてのサウンドをミキシングするオブジェクトであるプライマリ バッファと区別するため、セカンダリ バッファと呼ばれる。

3. PCM データを取得する。

WAV ファイルまたはリソースからプライベート バッファにデータを読み取る。DirectX SDK には、この処理のために使えるサンプル コードが含まれている。

4. データをバッファに格納する

IDirectSoundBuffer8::Lock を呼び出して、書き込み操作用にセカンダリ バッファを準備する。通常、このメソッドは 1 つのメモリ アドレスを返す。プライベート バッファからそのアドレスにデータをコピーした後、IDirectSoundBuffer8::Unlock を呼び出す。

5. バッファを再生する

IDirectSoundBuffer8::Play を呼び出してサウンドを再生する。バッファに対しては、最後に達した時点で停止するか、または IDirectSoundBuffer8::Stop を呼び出すまで繰り返し再生を続けるかを指示できる。バッファの開始と停止を繰り返し行ってもかまわない。ただし、同じデータを保持するバッファを別に作成しない限り、一度に演奏できるサウンドのインスタンスは 1 つだけである。任意の数のバッファを一度に再生でき、ミキシングは自動的に行われる。

前記の手順は、考えられる最も単純なシナリオに適用される。つまり、適当なサイズのバッファに収まる短いサウンドである。通常、数秒以上続くサウンドはストリーミングされる。つまり、既に再生されているデータは定期的に新しいデータに置き換えられる。

SDK に付属するサンプル コードでは、DirectSound を使って多くの共通する処理を実行する方法が示されている。詳細については、「DirectSound C++ サンプル」を参照すること。