MCPcopy Create free account
hub / github.com/NVIDIA-RTX/Donut / create

Method create

src/engine/AudioEngine.cpp:814–894  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

812}
813
814std::unique_ptr<Engine::Implementation> Xaudio2Implementation::create(Options const & opts)
815{
816 HRESULT hr;
817 if (FAILED(hr = CoInitializeEx(NULL, COINIT_MULTITHREADED)))
818 {
819 log::warning("AudioEngine : cannot initialize multi-threaded mode");
820 return nullptr;
821 }
822
823 std::unique_ptr<Xaudio2Implementation> result(std::move(new Xaudio2Implementation(opts)));
824
825 // interface
826 if (FAILED(hr = XAudio2Create(&result->m_xaudio2, 0)))
827 {
828 log::warning("AudioEngine : cannot initialize XAudio2 interface");
829 return nullptr;
830 }
831
832 if (FAILED(hr = result->m_xaudio2->RegisterForCallbacks(&result->m_callback)))
833 {
834 log::warning("AudioEngine : failed to register XAudio2 callback");
835 return nullptr;
836 }
837
838 // mastering voice
839 if (FAILED(hr = result->m_xaudio2->CreateMasteringVoice(&result->m_master, 2, opts.masteringRate)))
840 {
841 log::warning("AudioEngine : cannot initialize mastering mixer");
842 return nullptr;
843 }
844
845 DWORD masterMask;
846 if (FAILED(hr = result->m_master->GetChannelMask(&masterMask)))
847 {
848 log::warning("AudioEngine : error retrivieving mastering voice mask");
849 return nullptr;
850 }
851 result->m_masterMask = masterMask;
852
853 XAUDIO2_VOICE_DETAILS details;
854 result->m_master->GetVoiceDetails(&details);
855 result->m_masterChannels = details.InputChannels;
856 result->m_masterRate = details.InputSampleRate;
857
858 log::info("AudioEngine master voice : %d channels %d kHz 0x%x", details.InputChannels, details.InputSampleRate, masterMask);
859
860 result->m_master->SetVolume(opts.masterVolume);
861
862 // submix voices
863 if (FAILED(hr = result->m_xaudio2->CreateSubmixVoice(&result->m_music, 2, opts.masteringRate)))
864 {
865 log::warning("AudioEngine : cannot initialize music mixer");
866 return nullptr;
867 }
868
869 result->m_music->SetVolume(opts.musicVolume);
870
871 if (FAILED(hr = result->m_xaudio2->CreateSubmixVoice(&result->m_effects, 2, opts.masteringRate)))

Callers

nothing calls this directly

Calls 4

warningFunction · 0.85
infoFunction · 0.85
setListenerTransformMethod · 0.80
startUpdateThreadMethod · 0.80

Tested by

no test coverage detected