次の方法で共有


方法 : オーディオ デバイスの列挙

この例では、複数のオーディオ デバイスが存在している可能性がある場合に XAudio2 を初期化する方法を示します。GetDeviceCount メソッドおよび GetDeviceDetails メソッドを使用して、システム上で利用可能なオーディオ デバイスのプロパティを調べます。このプロセスにより、ゲームの要件に最も近いデバイスを選択することができます。受け入れ可能なデバイスが見つかったら、そのデバイス番号を CreateMasteringVoice メソッドに渡すことができます。

注意

1 つのオーディオ デバイスのみが存在する場合 (Xbox 360 の場合など) や、デフォルトのオーディオ デバイスを希望する場合は、IXAudio2::CreateMasteringVoiceDeviceIndex 引数にデフォルト値の 0 を使用します。デフォルトのオーディオ デバイスを使用するように XAudio2 を初期化する例については、「方法 : XAudio2 の初期化」を参照してください。

利用可能なオーディオ デバイスを列挙するには

  1. XAudio2Create 関数を使用して、XAudio2 エンジンのインスタンスを作成します。

    HRESULT hr;if ( FAILED(hr = XAudio2Create( &pXAudio2, 0, XAUDIO2_DEFAULT_PROCESSOR ) ) )    return hr;
  2. GetDeviceCount 関数で使用可能なオーディオ デバイスの数を調べます。

    UINT32 deviceCount;

    pXAudio2->GetDeviceCount(&deviceCount);

  3. 使用可能なデバイスを順に調べ、最も適切なデバイスを決めます。

    オーディオ デバイスの詳細は、GetDeviceDetails 関数で取得します。この例では、確認される唯一の要件は、オーディオ デバイスが 2 チャンネル以上をサポートしていることです。

    XAUDIO2_DEVICE_DETAILS deviceDetails;int preferredDevice = 0;

    デバイスの出力フォーマットに加えて、それぞれの照会対象オーディオ デバイスの既定の役割を確認するには、XAUDIO2_DEVICE_DETAILS.Role で返される値を確認します。たとえば、デフォルトの通信デバイスが必要な場合は、次のコードを使用してこのデバイスを検出できます。

    XAUDIO2_DEVICE_DETAILS deviceDetails;int preferredDevice = 0;

    for (unsigned int i = 0; i < deviceCount; i++){ pXAudio2->GetDeviceDetails(i,&deviceDetails); if (deviceDetails.Role == DefaultCommunicationsDevice) { preferredDevice = i; break; }}

  4. 最適なデバイスが見つかると、そのインデックスが CreateMasteringVoice 関数に渡されます。

    注意

    希望の条件を満たすデバイスがない場合は、DeviceIndex に 0 を指定すると、既定のグローバル デバイスが使用されます。

    IXAudio2MasteringVoice* pMasterVoice = NULL;
    if ( FAILED(hr = pXAudio2->CreateMasteringVoice( &pMasterVoice, XAUDIO2_DEFAULT_CHANNELS,                            XAUDIO2_DEFAULT_SAMPLERATE, 0, preferredDevice, NULL ) ) )    return hr;

関連トピック