修改配置文件:
引擎配置文件:BaseEngine.ini
[Audio]
MaxChannels=32
CommonAudioPoolSize=0
UnfocusedVolumeMultiplier=0.0
UseAudioThread=true
EnableAudioMixer=false
拷贝到项目配置文件:DefaultEngine.ini
Audio]
MaxChannels=32
CommonAudioPoolSize=0
UnfocusedVolumeMultiplier=1.0
UseAudioThread=true
EnableAudioMixer=false
修改UnfocusedVolumeMultiplier=1.0
//App.cpp
static bool GUnfocusedVolumeMultiplierInitialised = false;
float FApp::GetUnfocusedVolumeMultiplier()
{
if (!GUnfocusedVolumeMultiplierInitialised)
{
GUnfocusedVolumeMultiplierInitialised = true;
GConfig->GetFloat(TEXT("Audio"), TEXT("UnfocusedVolumeMultiplier"), UnfocusedVolumeMultiplier, GEngineIni);
}
return UnfocusedVolumeMultiplier;
}
void FApp::SetUnfocusedVolumeMultiplier(float InVolumeMultiplier)
{
UnfocusedVolumeMultiplier = InVolumeMultiplier;
GConfig->SetFloat(TEXT("Audio"), TEXT("UnfocusedVolumeMultiplier"), UnfocusedVolumeMultiplier, GEngineIni);
GUnfocusedVolumeMultiplierInitialised = true;
}
//WindowsPlatformApplicationMisc.cpp
void FWindowsPlatformApplicationMisc::PumpMessages(bool bFromMainLoop)
{
if (!bFromMainLoop)
{
TGuardValue<bool> PumpMessageGuard( GPumpingMessagesOutsideOfMainLoop, true );
// Process pending windows messages, which is necessary to the rendering thread in some rare cases where D3D
// sends window messages (from IDXGISwapChain::Present) to the main thread owned viewport window.
WinPumpSentMessages();
return;
}
GPumpingMessagesOutsideOfMainLoop = false;
WinPumpMessages();
// Determine if application has focus
bool HasFocus = FApp::UseVRFocus() ? FApp::HasVRFocus() : FWindowsPlatformApplicationMisc::IsThisApplicationForeground();
// If editor thread doesn't have the focus, don't suck up too much CPU time.
if( GIsEditor )
{
static bool HadFocus=1;
if( HadFocus && !HasFocus )
{
// Drop our priority to speed up whatever is in the foreground.
SetThreadPriority( GetCurrentThread(), THREAD_PRIORITY_BELOW_NORMAL );
}
else if( HasFocus && !HadFocus )
{
// Boost our priority back to normal.
SetThreadPriority( GetCurrentThread(), THREAD_PRIORITY_NORMAL );
}
if( !HasFocus )
{
// Sleep for a bit to not eat up all CPU time.
FPlatformProcess::Sleep(0.005f);
}
HadFocus = HasFocus;
}
// if its our window, allow sound, otherwise apply multiplier
FApp::SetVolumeMultiplier( HasFocus ? 1.0f : FApp::GetUnfocusedVolumeMultiplier() );
}