ValveSoftware / steam-audio

Steam Audio
https://valvesoftware.github.io/steam-audio/
Apache License 2.0
2.26k stars 156 forks source link

UE 5.4 - reverb at the listener position - crash #364

Open miguel-negrao opened 1 month ago

miguel-negrao commented 1 month ago

System Information Please provide the following information about your system:

Issue Description When using listener centric reverb UE crashes

Steps To Reproduce Steps to reproduce the behavior:

  1. Implement what is in the manual here.
  2. Play in editor.
  3. Crash.

Project which causes crash can be downloaded here (~500MiB).

Crash Dump

Unhandled Exception: EXCEPTION_ACCESS_VIOLATION reading address 0x0000000000000008

UnrealEditor_SteamAudio!FSteamAudioReverbSubmixPlugin::LazyInit() [F:\OneDrive - IPLeiria\AdvancedTopicsUE\UE\Surround_07_2024\SteamAudio\Plugins\SteamAudio\Source\SteamAudio\Private\SteamAudioReverb.cpp:524]
UnrealEditor_SteamAudio!FSteamAudioReverbSubmixPlugin::OnProcessAudio() [F:\OneDrive - IPLeiria\AdvancedTopicsUE\UE\Surround_07_2024\SteamAudio\Plugins\SteamAudio\Source\SteamAudio\Private\SteamAudioReverb.cpp:739]
UnrealEditor_Engine!FSoundEffectSubmix::ProcessAudio() [D:\build\++UE5\Sync\Engine\Source\Runtime\Engine\Private\SoundEffectSubmix.cpp:23]
UnrealEditor_AudioMixer!Audio::FMixerSubmix::GenerateEffectChainAudio() [D:\build\++UE5\Sync\Engine\Source\Runtime\AudioMixer\Private\AudioMixerSubmix.cpp:1688]
UnrealEditor_AudioMixer!Audio::FMixerSubmix::ProcessAudio() [D:\build\++UE5\Sync\Engine\Source\Runtime\AudioMixer\Private\AudioMixerSubmix.cpp:1411]
UnrealEditor_AudioMixer!Audio::FMixerSubmix::ProcessAudio() [D:\build\++UE5\Sync\Engine\Source\Runtime\AudioMixer\Private\AudioMixerSubmix.cpp:1303]
UnrealEditor_AudioMixer!Audio::FMixerDevice::OnProcessAudioStream() [D:\build\++UE5\Sync\Engine\Source\Runtime\AudioMixer\Private\AudioMixerDevice.cpp:930]
UnrealEditor_AudioMixerCore!Audio::FOutputBuffer::MixNextBuffer() [D:\build\++UE5\Sync\Engine\Source\Runtime\AudioMixerCore\Private\AudioMixer.cpp:247]
UnrealEditor_AudioMixerCore!Audio::IAudioMixerPlatformInterface::RunInternal() [D:\build\++UE5\Sync\Engine\Source\Runtime\AudioMixerCore\Private\AudioMixer.cpp:744]
UnrealEditor_AudioMixerCore!Audio::IAudioMixerPlatformInterface::Run() [D:\build\++UE5\Sync\Engine\Source\Runtime\AudioMixerCore\Private\AudioMixer.cpp:793]
UnrealEditor_Core!FRunnableThreadWin::Run() [D:\build\++UE5\Sync\Engine\Source\Runtime\Core\Private\Windows\WindowsRunnableThread.cpp:149]
lakulish commented 1 month ago

@miguel-negrao Unfortunately we are unable to reproduce the crash using the project you provided. Are you able to share a crash dump (.dmp) file from the crash that we can analyze?

jtbiddle commented 3 weeks ago

UEMinidump.dmp

I had the same issue - this is just a 3rd person example map with a single audio source (and a couple of engine plugins). It happens both with real-time reverb and baked (with a successful bake)

Edit: It even happens with no audio sources on the map and reflections disabled. Oddly, it worked for me yesterday, then I tried adding more audio sources and it crashed and has crashed on every run after that. It crashes about 5 seconds into any PIE

jtbiddle commented 3 weeks ago

"Skareeg Xigmatec" on Youtube figured it out, read the 4th paragraph of the description on setting up the reverb submix https://www.youtube.com/watch?v=bm98VFbOcnI

Copied here: Getting reflections to work was an absolute nightmare to figure out. You need to create your Steam Audio Reverb Settings and configure it to enable reflections (and I recommend HRTF on them if you want). You enable reverb in the attentuation settings and set it to manual send level at 1.0, to make sure Unreal doesn't try and do something to the reverb before it reaches Steam Audio. Select your reverb plugin settings object. This next part is vastly important. If you try to run, you will crash (it triggers access violations in C++). The legacy audio system is being sunset in favor of the new audio engine in Unreal. Steam Audio relies on having a Submix object to send the reverb to. Create a Submix asset for a reverb mix, then use the graph to make a master submix and connect them together to form your new mixing chain (you can just use one submix, but this lets you separate the reverb if you want). Then, create a Submix Effect Preset, using the Steam Audio Reverb Submix Plugin Preset option. Tell it to apply reverb and HRTF. Go to the reverb submix and use the plugin settings in your submix effect chain. Finally, go to your Project Settings, under Audio and set the default Reverb and Master submixes to the ones you just created (or the same one if using one), and then go to Steam Audio and make absolutely certain that your Reverb submix uner the reverb settings is the reverb submix you made (that should solve the crash). Change material settings in your world for reflections (settings them low to make it absurd like this demo does), then reexport geometry again.