We just updated our project to "2023.1.11.8682.3392" from "2023.1.3.8471.2970" in Unreal Engine 5.3, and we encountered this error after loading our Game level, from our Main Menu level.
We have some Actors in our MainMenu level to play some ambient sounds, these actors have an UAkComponent which references a UAkAudioEvent asset, on BeginPlay, we call UAkComponent::PostAkEvent to play these sounds. We have the flag StopWhenOwnerDestroyed set to true in the UAkComponent. s
When entering the Game Level, apparently, these sounds are correctly unloaded, but Wwise will still try to play them for some reason, spamming these errors.
Querying FAkAudioDevice::Get()->IsPlayingIDActive with the original EventId and PlayingId from the MainMenu returns true, as if the internal state is not properly cleared.
Is the internal state of FAkAudioDevice supposed to never be cleared? What can we do to debug the situation further? Thanks in advance.
Also, why does the error printed by Wwise changes depending on whether you have the Capture connected or not?
Am I right to assume that these two errors are actually the same error? That is quite confusing to me.
This is printed without the Capture
LogWwiseMonitor: Error: Selected node (452674424) not available. Make sure the structure associated to the event is loaded or that the event has been prepared Name: 27166237 GO: 2334419198752
This is printed with the Capture:
LogWwiseMonitor: Error: Media 489551405 was not loaded for this source Name: 15250706 GO: 2014176255280
Also, maybe completely unrelated, on iOS we are getting a bunch of plug-in not found errors:
LogWwiseMonitor: Error: Could not register plug-in: iZotope
2025-04-07 17:52:55: [ 0]LogWwiseMonitor: Error: Could not register plug-in: AkSilenceGenerator
2025-04-07 17:52:55: [ 0]LogWwiseMonitor: Error: Could not register plug-in: McDSP
2025-04-07 17:52:55: [ 0]LogWwiseMonitor: Error: Could not register plug-in: AkParametricEQ
2025-04-07 17:52:55: [ 0]LogWwiseMonitor: Error: Could not register plug-in: AkCompressor
2025-04-07 17:52:55: [ 0]LogWwiseMonitor: Error: Could not register plug-in: AkPeakLimiter
2025-04-07 17:52:55: [ 0]LogWwiseMonitor: Error: Could not register plug-in: AkFlanger
2025-04-07 17:52:55: [ 0]LogWwiseMonitor: Error: Could not register plug-in: AkConvolutionReverb
2025-04-07 17:52:55: [ 0]LogWwiseMonitor: Error: Could not register plug-in: AkStereoDelay
2025-04-07 17:52:55: [ 0]LogWwiseMonitor: Error: Could not register plug-in: AkGain
2025-04-07 17:52:55: [ 0]LogWwiseMonitor: Error: Could not register plug-in: AkMotion
2025-04-07 17:52:55: [ 0]LogWwiseMonitor: Error: Plug-in not found: 33226759
Edit Update:
We found out the solution to the issues.
For the non stopping sounds spamming "Selected node not available" the culprit was a change introduced somewhere between these Wwise versions in UAkComponent::OnUnregister
if( !Owner || !CurrentWorld || (StopWhenOwnerDestroyed && Owner->IsActorBeingDestroyed()) || CurrentWorld->bIsTearingDown || (Owner->GetClass() == APlayerController::StaticClass() && CurrentWorld->WorldType == EWorldType::PIE))
{
Stop();
}
Here the check Owner->IsActorBeingDestroyed was added, but in our case, due to how we are streaming our levels (additively), the UAkComponent::OnUnregister function is called when the actor is NOT being destroyed, so the sound is never stopped. In our case, we just removed this line for a quick patch, and the sounds are now properly stopped when changing levels.
In my opinion this callback shouldn't be used in this way, rather BeginDestroy should be used for a proper fix.
Plug-in not found:
For the issue about plugins not found on ios (it was completely unrelated), the issue was that our plugin header file includes were removed from the file AkiOSPlugins.h with the update for some reason.
As far as I understand, this header file should be automatically generated when compiling. Adding our plugin includes to this header file seems to have fixed the issue.