Skip to content

Instantly share code, notes, and snippets.

@mendsley
Created December 14, 2017 23:48
Show Gist options
  • Save mendsley/fbb495b292b95d35a014109e586d35dd to your computer and use it in GitHub Desktop.
Save mendsley/fbb495b292b95d35a014109e586d35dd to your computer and use it in GitHub Desktop.
Create IXAudio2MasteringVoice from IMMDevice
IXAudio2MasteringVoice* createVoiceForDevice(IXAudio2* xaudio2, IMMDevice* device)
{
LPWSTR id;
HRESULT hr = device->GetId(&id);
if (FAILED(hr))
{
device->Release();
return nullptr;
}
// build the XAudio2 device id
std::wstring deviceIdStr;
deviceIdStr.reserve(112);
deviceIdStr.append(L"\\\\?\\SWD#MMDEVAPI#");
deviceIdStr.append(id);
deviceIdStr.push_back(L'#');
size_t offset = deviceIdStr.size();
deviceIdStr.resize(deviceIdStr.capacity());
StringFromGUID2(DEVINTERFACE_AUDIO_RENDER, &deviceIdStr[offset], (int)(deviceIdStr.size() - offset));
CoTaskMemFree(id);
device->Release();
// create mastering voice
IXAudio2MasteringVoice* masterVoice;
hr = xaudio2->CreateMasteringVoice(&masterVoice, 2, XAUDIO2_DEFAULT_SAMPLERATE, 0, deviceIdStr.c_str(), nullptr, AudioCategory_GameEffects);
if (FAILED(hr))
{
return nullptr;
}
return masterVoice;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment