CRI ADX  Last Updated: 2024-09-25 17:41 p
複数デバイスからの出力

サンプルのディレクトリ

/cri/pc/samples/criatomex/multi_device

サンプルで使用しているデータ

/cri/common/smpdata/criatomex/
  • SampleProject.acf
  • AtomCueSheet.acb
  • AtomCueSheet.awb

サンプルの解説

複数のサウンドデバイスに音声を割り振って出力するサンプルです。
複数のデバイスから音声が同時に出力される点が、 select_device サンプルと異なります。
音声を再生する際、デバイスごとに独立したミキサーを用意する必要があるため、ミキサーとなるASRラックを追加で作成します。
このサンプルでは、4つのASRラック(デフォルトASRと3つの追加ASR)を作成し、各ASRラックの出力を異なるデバイスに割り振っています。
具体的な処理の流れは以下のとおりです。
  1. criAtom_EnumAudioEndpoints_WASAPI 関数でデバイスを列挙する。
  2. 見つかったデバイスを criAtom_SetDeviceId_WASAPI で順に CRIATOM_SOUND_RENDERER_HW1~4 に割り当てる。
  3. Atomライブラリを初期化し、デフォルトASRラックの出力を CRIATOM_SOUND_RENDERER_HW1 に設定する。
  4. 追加のASRラックを3つ作成し、各ASRラックの出力を CRIATOM_SOUND_RENDERER_HW2~4 に設定する。
  5. 音声再生開始時に、 criAtomExPlayer_SetAsrRackId 関数で出力先ASRラックを指定する。
具体的な処理コードの一例を以下に示します。
/* 最大デバイス数 */
#define MAX_DEVICES (4)
/* 実際に見つかったデバイスの数 */
static CriSint32 num_devices = 0;
/* デバイスごとに割り当てるハードウェアサウンドレンダラの種別 */
static const CriAtomSoundRendererType sound_renderer_table[MAX_DEVICES] = {
};
/* メイン処理 */
main()
{
/* オーディオデバイスの列挙 */
criAtom_EnumAudioEndpoints_WASAPI(user_endpoint_callback, NULL);
/* ライブラリを初期化(CRIATOM_SOUND_RENDERER_HW1を使用) */
lib_config.asr.sound_renderer_type = CRIATOM_SOUND_RENDERER_HW1;
criAtomEx_Initialize_WASAPI(&lib_config, NULL, 0);
/* 追加デバイス用にASRラックを作成(CRIATOM_SOUND_RENDERER_HW2~4を使用) */
for (i = 1; i < MAX_DEVICES; i++) {
asr_rack_config.sound_renderer_type = sound_renderer_table[i];
app_obj->asr_rack_id[i] = criAtomExAsrRack_Create(&asr_rack_config, NULL, 0);
}
/* 出力先ASRラックIDの指定 */
criAtomExPlayer_SetAsrRackId(app_obj->player, app_obj->selected_device);
/* 再生の開始 */
/* Start playback */
app_obj->playback_id = criAtomExPlayer_Start(app_obj->player);
}
/* デバイス検出時に呼び出されるコールバック */
static void CRIAPI user_endpoint_callback(void *object, IMMDevice *device)
{
/* デバイスIDの取得 */
device->GetId(&device_id);
/* サウンドレンダラとハードウェアを紐づけ */
criAtom_SetDeviceId_WASAPI(sound_renderer_table[num_devices], device_id);
/* デバイスID領域を解放 */
CoTaskMemFree(device_id);
}
CriAtomExAsrRackId criAtomExAsrRack_Create(const CriAtomExAsrRackConfig *config, void *work, CriSint32 work_size)
ASRラックの作成
CriAtomExPlaybackId criAtomExPlayer_Start(CriAtomExPlayerHn player)
再生の開始
void criAtomExPlayer_SetAsrRackId(CriAtomExPlayerHn player, CriSint32 rack_id)
ASRラックIDの指定
#define criAtomExAsrRack_SetDefaultConfig(p_config)
CriAtomAsrConfigへのデフォルトパラメーターをセット
Definition: cri_le_atom_asr.h:2122
enum CriAtomSoundRendererTypeTag CriAtomSoundRendererType
サウンドレンダラタイプ
@ CRIATOM_SOUND_RENDERER_HW1
Definition: cri_le_atom.h:820
@ CRIATOM_SOUND_RENDERER_HW3
Definition: cri_le_atom.h:822
@ CRIATOM_SOUND_RENDERER_HW2
Definition: cri_le_atom.h:821
@ CRIATOM_SOUND_RENDERER_HW4
Definition: cri_le_atom.h:823
void criAtomEx_Initialize_WASAPI(const CriAtomExConfig_WASAPI *config, void *work, CriSint32 work_size)
ライブラリの初期化
CriSint32 criAtom_EnumAudioEndpoints_WASAPI(CriAtomAudioEndpointCbFunc_WASAPI callback, void *object)
オーディオエンドポイントの列挙
void criAtom_SetDeviceId_WASAPI(CriAtomSoundRendererType type, LPCWSTR device_id)
サウンドデバイスの指定
#define criAtomEx_SetDefaultConfig_WASAPI(p_config)
ライブラリ初期化用コンフィグ構造体にデフォルト値をセット
Definition: cri_le_atom_wasapi.h:79
注意
CRIATOM_SOUND_RENDERER_HW1 と CRIATOM_SOUND_RENDERER_NATIVE は同じサウンドレンダラを指します。
そのため、 CRIATOM_SOUND_RENDERER_HW1 にデバイスをアサインした後、 CRIATOM_SOUND_RENDERER_NATIVE にもデバイスをアサインすると、 CRIATOM_SOUND_RENDERER_HW1 に対する設定が上書きされます。
(アプリケーション中ではどちらか一方のみを使用してください。)