次の方法で共有


IDirectPlayVoiceClient::Create3DSoundBuffer メソッド

IDirectPlayVoiceClient::Create3DSoundBuffer メソッド

プレーヤまたはグループ用の 3D サウンド バッファを取得する。3D サウンド バッファ オブジェクトのメソッドを使うと、指定したグループまたはプレーヤから受信した音声転送の仮想 3D 位置を変更できる。

構文

HRESULT Create3DSoundBuffer(      
    DVID dvID,
    LPDIRECTSOUNDBUFFER lpdsSourceBuffer,
    DWORD dwPriority,
    DWORD dwFlags,
    LPDIRECTSOUND3DBUFFER *lpUserBuffer
);

パラメータ

  • dvID
    [in] ユーザーがバッファを保存する対象となるプレーヤまたはグループの識別情報を指定する DVID 型の変数。また、DVID_REMAINING を指定すると、ユーザー バッファがないすべてのプレーヤまたはグループに対して 3D ユーザー バッファを作成できる。DVID_REMAINING を指定する場合、 lpdsSourceBuffer パラメータに NULL を指定し、dwPriority パラメータと dwFlags パラメータを 0 に設定する必要がある。
  • lpdsSourceBuffer
    [in] Microsoft® DirectPlay® Voice のメイン バッファの作成に使う、IDirectSoundBuffer インターフェイスへのポインタ。NULL、またはユーザー作成の Microsoft DirectSound® バッファを指定できる。このメンバが NULL の場合、DirectPlay Voice がバッファを作成する。
  • dwPriority
    [in] ダイレクト パススルー。IDirectSoundBuffer::Play が呼び出されるとき、この値は dwPriority パラメータに渡される。詳細については、「IDirectSoundBuffer8::Play」を参照すること。lpdsSourceBuffer が NULL の場合、このパラメータは 0 でなければならない。
  • dwFlags
    [in] ダイレクト パススルー。IDirectSoundBuffer::Play が呼び出されるとき、この値は dwFlags パラメータに渡される。詳細については、「IDirectSoundBuffer8::Play」を参照すること。lpdsSourceBuffer が NULL の場合、このパラメータは 0 でなければならない。
  • lpUserBuffer
    [out] 予約されたバッファが置かれるメモリへのポインタ。

戻り値

成功した場合は DV_OK を返す。または、次のいずれかのエラー値を返す。

DVERR_ALREADYBUFFERED 指定された ID には既にユーザー バッファがある。
DVERR_INVALIDOBJECT DirectPlay オブジェクトのポインタは無効である。
DVERR_INVALIDPARAM メソッドに渡された 1 つ以上のパラメータが無効である。
DVERR_INVALIDPOINTER 指定されたポインタが無効である。
DVERR_NOTALLOWED オブジェクトには、この処理を実行する権限がない。
DVERR_NOTCONNECTED DirectPlay Voice オブジェクトが接続されていない。
DVERR_NOTINITIALIZED このメソッドを呼び出す前に、IDirectPlayVoiceClient::Initialize メソッドまたは IDirectPlayVoiceServer::Initialize メソッドを呼び出す必要がある。
DVERR_OUTOFMEMORY 要求された処理を実行するには、メモリが不足している。
DVERR_SESSIONLOST トランスポートはセッションへの接続を喪失した。

注意

DirectPlay の音声セッションがミキシング サーバー セッションの場合、このメソッドは失敗し、DVERR_NOTALLOWED を返す。

3D サウンド バッファ オブジェクトのすべてのメンバ関数にアクセスできるが、DirectPlay Voice クライアントがバッファを使って受信オーディオのストリーミングを行うため、DirectSound3Dbuffer オブジェクトの LockUnLock、または Play の各メソッドは使わないこと。

ここでバッファを指定した場合、DirectPlay はそのバッファをプレーヤまたはグループのバッファとして使う。ユーザー作成のバッファには次の制限がある。

  • バッファは、22 Khz、16 ビット、モノラル フォーマットでなければならない。
  • バッファの長さは 1 秒以上でなければならない。
  • バッファは、DSBCAPS_GETCURRENTPOSITION2 および DSBCAPS_CTRL3D フラグを使って作成されていなければならない。
  • バッファは、プライマリ バッファであってはならない。
  • DirectPlay にバッファを渡すときは、バッファが再生中であってはならない。

バッファの形式が正しくない場合、メソッドは DVERR_INVALIDBUFFER を返す。

DirectPlay にバッファを渡すときは、バッファがロックされていてはならない。個々のユーザーが不必要になるか、プレーヤがボイス セッションを離れる場合、IDirectPlayVoiceClient::Delete3DSoundBuffer を呼び出し、リソースを解放する必要がある。

DirectPlay Voice がバッファに書き込もうとしたときにバッファまたはバッファの一部がロックされている場合、メソッドは DVERR_INVALIDBUFFER を返す。メソッドが返った後でバッファをロックした場合は、DVMSGID_SESSIONLOST メッセージを受け取る。関連付けられている構造体の hResult メンバは DVERR_LOCKEDBUFFER に設定される。この後のメソッドの呼び出しは、DVERR_NOTCONNECTED エラー コードを返す。