Quick answer: The most common cause is a missing or disconnected Output node in the MetaSound graph. MetaSounds require an explicit 'On Play' trigger connected through the signal chain and a final Audio output node that routes to the mono or stereo output.
Here is how to fix Unreal metasound not playing. You have built a MetaSound graph, wired up oscillators or wave players, and attached a MetaSoundSource component to your actor. You hit Play in the editor — nothing. No audio, no errors in the Output Log, no indication that anything went wrong. The MetaSound previews fine inside the asset editor, but the moment you try to play it in the world, silence. This is one of the most common and disorienting issues with Unreal’s MetaSound system because it fails without telling you why.
The Symptom
You create a MetaSound source asset and design an audio graph using oscillators, wave players, envelopes, or any combination of MetaSound nodes. When you click the preview speaker icon inside the MetaSound editor, you hear audio as expected. Everything sounds correct in isolation.
Then you add a UAudioComponent or UMetaSoundSource to an actor in your level, assign the MetaSound asset, and call Play(). The component reports that it is playing — IsPlaying() returns true — but no sound reaches the audio output. The level is silent. You check the volume, check the audio device, and verify that other non-MetaSound audio plays fine.
In a second variation of this problem, the MetaSound plays once when the level first loads but never plays again on subsequent trigger calls. This happens when the graph lacks a proper re-trigger path and the On Play input fires only during initialization. The MetaSound sits in a finished state and ignores further Play requests from the component.
What Causes This
1. The On Play trigger is not connected. Every MetaSound source has an On Play input trigger that fires when the owning audio component calls Play(). If this trigger is not wired to the nodes that initiate audio generation, the graph will activate but no node will start producing samples. The editor preview works differently — it can auto-trigger nodes for convenience — which is why you hear audio in the preview but not at runtime.
2. The Output node is missing or disconnected. MetaSounds require an explicit output node that defines the audio bus. If the final node in your signal chain is not connected to a Mono Output or Stereo Output node, the graph produces no samples for the audio engine to consume. Unlike legacy SoundCues where the output is implicit, MetaSounds must explicitly route to an output.
3. Attenuation radius is too small. When a MetaSoundSource component has spatialization and attenuation enabled, the sound will only be audible within the attenuation radius. If the default falloff distance is set to something small like 100 units and your camera or listener is 500 units away, you will hear nothing. The editor preview does not apply attenuation, so the mismatch between preview and runtime behavior is expected.
4. The wave asset is not set or fails to load. If your MetaSound graph uses a Wave Player node with a Wave Asset input parameter, and that parameter is not set on the component or the referenced asset has been deleted or moved, the Wave Player will produce silence. No error is logged in many engine versions because a null wave asset is treated as a valid empty input.
The Fix
Step 1: Wire the On Play trigger to your audio generation chain. Open the MetaSound asset and make sure the On Play trigger input is connected to every node that needs to start producing audio. For wave players, connect it to the Play input pin. For envelope generators, connect it to the Trigger pin. This is the single most common fix.
// Verify the MetaSound component setup and trigger Play
// In your actor header file:
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Audio")
UAudioComponent* MetaSoundComp;
// In the actor constructor:
AMyAudioActor::AMyAudioActor()
{
MetaSoundComp = CreateDefaultSubobject<UAudioComponent>(
TEXT("MetaSoundComp"));
MetaSoundComp->SetupAttachment(GetRootComponent());
MetaSoundComp->bAutoActivate = false;
}
// In BeginPlay, assign the asset and play:
void AMyAudioActor::BeginPlay()
{
Super::BeginPlay();
if (MetaSoundAsset)
{
MetaSoundComp->SetSound(MetaSoundAsset);
MetaSoundComp->Play();
UE_LOG(LogTemp, Warning, TEXT("MetaSound IsPlaying: %s"),
MetaSoundComp->IsPlaying() ? TEXT("Yes") : TEXT("No"));
}
else
{
UE_LOG(LogTemp, Error,
TEXT("MetaSoundAsset is null. Assign it in the Details panel."));
}
}
Step 2: Confirm the Output node is connected and matches the expected channel format. Open the MetaSound graph and verify that your final audio signal flows into an output node. If you are generating stereo audio, use a Stereo Output. If mono, use Mono Output. A mismatch does not always cause an error but can result in silence on certain platforms.
// Set a MetaSound parameter from C++ to debug output
// This sets a float parameter on the MetaSound graph at runtime
// Useful for verifying the component is communicating with the graph
#include "MetasoundSource.h"
void AMyAudioActor::SetMetaSoundGain(float Gain)
{
if (!MetaSoundComp)
{
UE_LOG(LogTemp, Error, TEXT("MetaSoundComp is null."));
return;
}
// Set a float parameter named "Gain" on the MetaSound
MetaSoundComp->SetFloatParameter(
FName(TEXT("Gain")), FMath::Clamp(Gain, 0.0f, 1.0f));
UE_LOG(LogTemp, Warning, TEXT("Set MetaSound Gain to: %f"), Gain);
// If the sound is not playing, start it
if (!MetaSoundComp->IsPlaying())
{
MetaSoundComp->Play();
UE_LOG(LogTemp, Warning, TEXT("MetaSound was stopped. Restarted playback."));
}
}
Step 3: Fix attenuation settings so the sound is audible at the listener distance. If the MetaSound plays when the camera is close to the actor but is silent from the normal gameplay camera distance, the attenuation radius is too small. Either increase the falloff distance or disable attenuation to confirm.
// Configure attenuation on the MetaSoundSource component
void AMyAudioActor::ConfigureAttenuation()
{
if (!MetaSoundComp) return;
// Option A: Disable attenuation entirely (2D sound)
// MetaSoundComp->bOverrideAttenuation = true;
// MetaSoundComp->bAllowSpatialization = false;
// Option B: Set a larger attenuation radius
FSoundAttenuationSettings AttSettings;
AttSettings.bAttenuate = true;
AttSettings.FalloffDistance = 5000.0f; // 50 meters in UE scale
AttSettings.AttenuationShape = EAttenuationShape::Sphere;
AttSettings.FalloffMode = EAttenuationDistanceModel::NaturalSound;
MetaSoundComp->bOverrideAttenuation = true;
MetaSoundComp->AttenuationOverrides = AttSettings;
UE_LOG(LogTemp, Warning,
TEXT("Attenuation configured. Falloff distance: %f"),
AttSettings.FalloffDistance);
// Verify listener distance for debugging
APlayerController* PC = GetWorld()->GetFirstPlayerController();
if (PC)
{
FVector ListenerPos;
FVector ListenerFwd;
PC->GetAudioListenerPosition(ListenerPos, ListenerFwd);
float Dist = FVector::Dist(GetActorLocation(), ListenerPos);
UE_LOG(LogTemp, Warning,
TEXT("Listener distance: %f (Falloff: %f)"),
Dist, AttSettings.FalloffDistance);
}
}
Related Issues
If your MetaSound plays but spatial positioning feels wrong or the sound appears to come from the wrong direction, check our guide on Chaos physics and spatialization issues for coordinate system and component transform troubleshooting. If audio works in the editor but breaks in packaged builds, the wave asset may not be included in the cook — verify that all referenced assets are in a directory that gets packaged.
MetaSound preview bypasses attenuation and auto-triggers nodes. Runtime requires explicit On Play wiring and a connected Output node.