That fix is not correct as it only solves the problem with dedicated servers but the problem persists with listen servers.
Instead of checking AsPlayerCameraManager->GetWorld()->AllowAudioPlayback() to decide wether you setup a listener or not for that player camera manager, you should check if the player camera manager owning controller is a local controller or not.
void FAkAudioDevice::OnActorSpawned(AActor* SpawnedActor)
{
APlayerCameraManager* AsPlayerCameraManager = Cast<APlayerCameraManager>(SpawnedActor);
if (AsPlayerCameraManager)
{
APlayerController* CameraOwner = Cast<APlayerController>(AsPlayerCameraManager->GetOwner());
if (CameraOwner && CameraOwner->IsLocalPlayerController())
{
UAkComponent* pAkComponent = NewObject<UAkComponent>(SpawnedActor);
if (pAkComponent != nullptr)
{
pAkComponent->RegisterComponentWithWorld(SpawnedActor->GetWorld());
pAkComponent->AttachToComponent(SpawnedActor->GetRootComponent(), FAttachmentTransformRules::KeepWorldTransform, FName());
AddDefaultListener(pAkComponent);
}
}
}
}
The actor owner for PlayerCameraManager will always be the owning controller, so you can cast it safely.
This way everything will work as expected. Dedicated servers won't have any listeners. Listen servers will have listeners only for its local players and clients will have listeners only for its local players.