WASAPI排他モード

サンプルのディレクトリ

/cri/pc/samples/criatomex/wasapi_exclusive

サンプルの解説

使用方法

WASAPIの排他モードを使用する場合、以下の手順でライブラリを初期化する必要があります。
  1. criAtom_SetAudioClientShareMode_WASAPI 関数でWASAPIの排他モードを使用するようライブラリに指示。
  2. criAtom_SetAudioClientFormat_WASAPI 関数にサウンド出力フォーマットを WAVEFORMATEXTENSIBLE 型で指定する。
  3. criAtomEx_Initialize_WASAPI 関数でライブラリを初期化する。
具体的な処理コードの一例を以下に示します。
/* WASAPIを排他モードで初期化するよう指示 */
    criAtom_SetAudioClientShareMode_WASAPI(AUDCLNT_SHAREMODE_EXCLUSIVE);

    /* WASAPIの出力フォーマットを指定 */
    /* 注意)本サンプルでは48kHz 24bit PCM出力を使用しますが、          */
    /*    必ずしも指定したフォーマットが使用できるとは限りません。   */
    memset(&output_format, 0, sizeof(output_format));
    ex_ptr = (WAVEFORMATEX *)&output_format;
    ex_ptr->wFormatTag = WAVE_FORMAT_EXTENSIBLE;
    ex_ptr->nChannels = 2;
    ex_ptr->nSamplesPerSec = 48000;
    ex_ptr->wBitsPerSample = 32;
    ex_ptr->nBlockAlign = ex_ptr->wBitsPerSample / 8 * ex_ptr->nChannels;
    ex_ptr->nAvgBytesPerSec = ex_ptr->nSamplesPerSec * ex_ptr->nBlockAlign;
    ex_ptr->cbSize = 22;
    output_format.Samples.wValidBitsPerSample = 24;
    output_format.SubFormat = KSDATAFORMAT_SUBTYPE_PCM;
    criAtom_SetAudioClientFormat_WASAPI((const WAVEFORMATEX *)ex_ptr);

    /* WASAPI出力用にライブラリを初期化 */
    /* Initialize the library for WASAPI output */
    criAtomEx_Initialize_WASAPI(NULL, NULL, 0);
        :
[備考]
criAtomEx_Initialize_WASAPI 関数を使用してライブラリを初期化した場合、ライブラリの終了処理を criAtomEx_Finalize_WASAPI 関数を用いて行う必要があります。
注意点

指定されたフォーマットで正常に音声が出力されるかどうかは、使用するハードウェアに強く依存します。
(WASAPIがエラーを返さないにもかかわらず、音声が正しく出力されないケースが確認されています。)
WASAPI排他モードの使用は、PCベースのアーケード機等、使用するハードウェアが限定されているケースのみに留めてください。
WASAPIの排他モードを使用できるアプリケーションは、OS上で1つだけです。
WASAPI排他モードを使用するアプリケーションを複数同時に起動した場合、ライブラリの初期化に失敗します
WASAPI排他モード使用時は、他のアプリケーションによる音声出力が行えなくなります。
また、同一アプリケーション中であっても、Atomライブラリを使用せずに音声を再生するものは全てミュートされます。
現状、Atomライブラリでは以下の3種類の量子化ビット数のPCMデータフォーマットをサポートしています。
上記以外PCMデータの形式を指定した場合や、上記に該当するケースでも criAtom_GetAudioClientIsFormatSupported_WASAPI 関数が CRI_FALSE を返す場合、指定されたフォーマットでの音声出力は行えません。

CRI Middleware logo Copyright (c) 2006-2018 CRI Middleware Co., Ltd.