複数のオーディオ ストリームを同時に再生するアプリケーションのオーディオ コードを提供しています。さまざまなオプションのすべてに少し混乱しており、よくわからない特定のことがいくつかあります。
ボリュームの取得と設定に IAudioClient 呼び出しを使用しています。複数のストリームのボリュームを取得する最良の方法はありますか?
IAudioClient::Initialize を呼び出す必要があるようです。この関数には、WAVEFORMATEX 構造体が必要です。ボリューム設定で使用するチャネル数以外のパラメータはありますか? また、Initialize は 1 回しか使用できないようで、ボリュームの設定と読み取りが何度も行われます。IAudioClient への参照を保存して毎回使用する必要がありますか? または、ボリュームを取得または設定するたびに解放できますか?
同じデバイス (エンドポイント) で再生されている 2 つのストリームを区別するにはどうすればよいですか?
ボリュームを設定するコードは次のとおりです (スペースを節約するために、各呼び出しが成功したことを確認するための通常のチェックは省略されています)。
hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&DeviceEnumerator));
hr = DeviceEnumerator->GetDevice((wchar_t *)currentPlaybackDevice.id, &pPlaybackDevice);
hr = pPlaybackDevice->Activate(__uuidof(IAudioClient), CLSCTX_INPROC_SERVER, NULL, reinterpret_cast<void **>(&pPlaybackClient));
hr = pPlaybackClient->Initialize(AUDCLNT_SHAREMODE_SHARED, 0, 0, 0, &pWaveFormat, 0);
hr = pPlaybackClient->GetService(__uuidof(IAudioStreamVolume), (void **)&pStreamVolume);
hr = pStreamVolume->GetChannelCount(&channels);
for(UINT32 i = 0; i < channels; i++)
chanVolumes[i] = playbackLevel;
hr = pStreamVolume->SetAllVolumes(channels, chanVolumes);