Quick answer: MetaSound assets loaded via soft references or asset paths are not cooked automatically — add them to Additional Asset Directories to Cook, fix any unresolved graph inputs, ensure you’re using MetaSoundSource (not MetaSoundPatch) for direct playback, and confirm the Audio Modulation plugin is enabled in your packaged target.
Everything sounds perfect in the editor. You hit package, run the build, and the silence is deafening — your MetaSound effects and music simply don’t play. This is one of the most frustrating Unreal Engine packaging bugs because it produces no visible error in the UI; the game runs, objects spawn, animations play, and audio just… doesn’t. The root causes are almost always one of five things, and this post walks through each one with the exact fix.
Root Cause 1: MetaSound Assets Not Being Cooked
Unreal’s cooker works by following hard asset references from your starting maps and primary assets. If you load a MetaSound asset dynamically — via a soft object reference, a TSoftObjectPtr, or a string path passed to StaticLoadObject — the cooker has no way to know that asset needs to be included, and it will be silently excluded from the package.
The fix is to tell the cooker about those assets explicitly. Navigate to Project Settings → Packaging → Additional Asset Directories to Cook and add the folder containing your MetaSound assets (e.g. /Game/Audio/MetaSounds). Every asset in that directory will be cooked regardless of reference type.
; DefaultGame.ini — alternative approach via Primary Asset Labels
[/Script/Engine.AssetManagerSettings]
+PrimaryAssetTypesToScan=(
PrimaryAssetType="MetaSoundSource",
AssetBaseClass=/Script/MetasoundEngine.MetaSoundSource,
bHasBlueprintClasses=False,
bIsEditorOnly=False,
Directories=((Path="/Game/Audio/MetaSounds")),
Rules=(ChunkId=0,Priority=1,bApplyRecursively=True)
)
Alternatively, create a Primary Asset Label asset (right-click in the Content Browser → Miscellaneous → Primary Asset Label), set its Label Rules to include your MetaSound folder, and assign a chunk ID. This is the cleaner long-term approach if you use asset streaming or chunk-based DLC.
Root Cause 2: Unresolved Graph Inputs Failing Silently
MetaSound graphs can expose inputs — pitch, volume, trigger parameters — that Blueprint code is expected to set at runtime. In the editor, Unreal fills in default values if an input is unresolved and prints a warning to the Output Log. In a packaged build, that warning is suppressed and the graph may simply produce no audio output if a required input (like a Trigger node that starts audio playback) never fires.
Open your MetaSound graph and inspect every input node. Any input that is marked as required and has no default value is a liability. Either set a sensible default value directly on the input node, or make sure your Blueprint code sets it before calling Activate on the Audio Component.
// Correct order: set inputs before activating
UAudioComponent* AudioComp = UGameplayStatics::SpawnSoundAtLocation(
this, MyMetaSoundSource, GetActorLocation()
);
if (AudioComp)
{
AudioComp->SetFloatParameter("Pitch", 1.2f);
AudioComp->SetTriggerParameter("OnPlay");
// Do NOT call Activate() manually — SpawnSoundAtLocation auto-activates
}
“MetaSound: Failed to find” in your packaged log means an asset reference is broken or the asset was not cooked. That single log line narrows the problem to cooking, not graph logic.
Root Cause 3: Using MetaSoundPatch Instead of MetaSoundSource
Unreal Engine offers two MetaSound asset types that look nearly identical in the Content Browser. MetaSoundSource is a self-contained, playable asset that Unreal treats like a legacy USoundBase. You can pass it to UGameplayStatics::PlaySoundAtLocation, assign it to an Audio Component’s Sound property, or use it in a Cue. MetaSoundPatch is a reusable sub-graph — it has inputs and outputs but cannot be played directly.
If you accidentally create a MetaSoundPatch when you meant to create a MetaSoundSource, everything will appear to work in the editor (Unreal tries to preview it anyway), but the Audio Component will silently refuse to play it in a packaged build because there is no valid ISoundGeneratorPtr produced.
Check your asset type in the Content Browser. MetaSoundSource assets show a speaker icon; MetaSoundPatch assets show a graph/node icon. You cannot convert between them in-place — you must recreate the graph as the correct type. Copy nodes via Edit → Copy in the MetaSound editor and paste into a new MetaSoundSource asset.
Root Cause 4: Checking the Packaged Output Log
Packaged builds do not show an Output Log window, but they do write to a log file. On Windows, the log is at %LOCALAPPDATA%\[ProjectName]\Saved\Logs\[ProjectName].log. On Linux and macOS, it is under ~/Library/Logs or the project’s Saved/Logs directory depending on how you ran the binary.
# Run packaged build with logging enabled
./MyGame.sh -log -LogCmds="LogMetaSound Verbose, LogAudio Verbose"
# Then grep the log for MetaSound errors
grep -i "metasound\|audioc" ~/Library/Logs/MyGame/MyGame.log
The messages to look for are MetaSound: Failed to find (missing asset), AudioComponent: Sound asset is null (null reference survived packaging), and MetaSoundGraph: Input not found (unresolved parameter name, often a typo between Blueprint and the graph).
Adding the following to DefaultEngine.ini ensures verbose MetaSound logs are included even in Development builds:
; DefaultEngine.ini
[Core.Log]
LogMetaSound=Verbose
LogAudioMixer=Warning
Root Cause 5: Audio Modulation Plugin Not Enabled for Packaged Target
If your MetaSound graphs use modulation — volume buses, pitch modulators, or the built-in MetaSound modulation nodes — the Audio Modulation plugin must be enabled in your project’s .uproject file and also listed as enabled for the packaged platform. A plugin that is enabled only “for editor” will be stripped from the cooked build.
Open your .uproject file and locate the Plugins array. Ensure the Audio Modulation entry has "Enabled": true and does not carry "EditorOnly": true:
// MyProject.uproject
{
"Plugins": [
{
"Name": "AudioModulation",
"Enabled": true
// "EditorOnly": true <-- remove this line if present
},
{
"Name": "Metasound",
"Enabled": true
}
]
}
After editing the .uproject file, regenerate project files and do a full cook rather than an incremental one. Incremental cooks cache plugin state from the previous run and may not pick up the change.
Systematic Debugging Checklist
When a MetaSound is silent in a packaged build, work through this checklist in order before diving deep into graph logic:
- Confirm the asset type is MetaSoundSource, not MetaSoundPatch.
- Add the asset’s folder to Additional Asset Directories to Cook and re-cook.
- Run the packaged build with
-logand search forMetaSound: Failed to find. - Open the MetaSound graph and check every exposed input has a default value or is guaranteed to be set before playback.
- Verify that the Audio Modulation plugin is enabled without the
EditorOnlyflag. - Check that the
UAudioComponentreference is not null at the point ofSetTriggerParameter— async spawning can cause race conditions.
Tracking down silent audio bugs in packaged builds is exactly the kind of intermittent issue that slips through playtesting because it only happens outside the editor. If you’re shipping a game, connecting a crash and bug reporting tool like Bugnet gives you the output log context and device metadata you need to reproduce these issues from player reports without guessing.
Silence is the hardest bug to track — at least a crash gives you a stack trace.