我正在为将同时播放多个音频流的应用程序提供音频代码。我对所有不同的选项都感到有些困惑,并且有些具体的事情我不太了解。
我正在使用 IAudioClient 调用来获取和设置音量。这是为多个流获取音量的最佳方式吗?
看来我必须调用 IAudioClient::Initialize。此函数需要 WAVEFORMATEX 结构。除了音量设置中使用的通道数之外,还有其他参数吗?此外,Initialize 似乎只能使用一次,并且音量设置和读取会发生多次。我应该保存对 IAudioClient 的引用并每次都使用它,还是每次获取或设置音量时都可以释放它?
如何区分在同一设备(端点)上播放的两个流?
这是设置音量的代码(通过常规检查确保每个调用成功消除以节省空间):
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);