カクタスソフトウェア
カクタスソフトウェア
サウンド MIDI マルチメディア アプリケーション

録音・再生各オブジェクトの生成

デバイスには、特に全二重用というものがあるわけではなく、任意の録音・再生、2つのデバイスを組み合わせれば動作します。同一サウンドカード上のデバイスでも、異なるハードウェア上にあっても構いません。ただし運用するサンプリング周波数とチャンネル数を双方が支援している必要があります。

デバイスの組み合わせについては、後述するサンプリング周波数の精度誤差問題があります。これについてはセクション「録音と再生の同期」を参照してください。

デバイスの列挙

デバイスの列挙は、各デバイス毎に独立して行います。詳しくは、「ダイレクトサウンドによる録音」、「ダイレクトサウンドによる再生」を参照して下さい。

オブジェクトの作成

オブジェクトの作成は、録音と再生を個々に行う方法と、専用のDirectSoundFullDuplexCreate8()関数を用いる方法があります。

HRESULT WINAPI DirectSoundFullDuplexCreate8(
    LPCGUID                     pcGuidCaptureDevice,
    LPCGUID                     pcGuidRenderDevice,
    LPCDSCBUFFERDESC            pcDSCBufferDesc,
    LPCDSBUFFERDESC             pcDSBufferDesc,
    HWND                        hWnd,
    DWORD                       dwLevel,
    LPDIRECTSOUNDFULLDUPLEX*    ppDSFD,
    LPDIRECTSOUNDCAPTUREBUFFER8 *ppDSCBuffer8,
    LPDIRECTSOUNDBUFFER8        *ppDSBuffer8,
    LPUNKNOWN                   pUnkOuter)
DirectSoundFullDuplexCreate8()関数は、WindowsXPでないと動作しないので汎用性という点で不利です。また同関数は引数が多く扱いが面倒です。筆者の書いたコードでは、個々に作成した場合とほとんど工数は変わりませんでした。

MSDNの「キャプチャデバイスオブジェクトの作成」のページに以下の記述があります。しかし筆者が行った実験の範囲では、キャプチャデバイスを先に作成しても動作しているようでした。サンプルプログラムでは安全のために再生デバイスの作成を先にしています。

再生デバイスオブジェクトとキャプチャデバイスオブジェクトを共存させたい場合は、キャプチャデバイスオブジェクトの作成と初期化を行う前に再生デバイスオブジェクトの作成と初期化を行うようにするか、またはDirectSoundFullDuplexCreate8を使う必要がある。

ドキュメントの先頭へ

カクタスソフトウェア 技術協力 資料室 資料室の広場 SourceForge.jp お問い合わせ