Quick answer: MetaSound assets and their referenced wave sources must be in the cook dependency graph. Add the MetaSound directory to “Additional Directories to Cook” or ensure hard references exist from cooked actors. Also verify MetasoundEngine and MetasoundFrontend modules are in your Build.cs dependencies.
Here is how to fix Unreal MetaSound not playing in packaged build. You build an adaptive music system or procedural SFX generator using MetaSounds. In PIE, everything sounds perfect — layered audio, parameter-driven synthesis, reactive music. You package the game, launch it, and hear silence. No audio plays from any MetaSound source. Legacy SoundCue assets still work. Only MetaSounds are affected.
The Symptom
MetaSound assets play correctly in Play In Editor mode but produce no audio in Development or Shipping packaged builds. The game runs without errors, gameplay works, but MetaSound-driven audio is completely silent. SoundCue and SoundWave assets may still work normally.
What Causes This
MetaSound asset not cooked. PIE has access to all project assets regardless of references. Packaged builds only include assets reachable through the cook dependency graph (hard references from maps, Blueprints, or data assets). If your MetaSound is only referenced via soft pointers or loaded by string path, the cooker may skip it.
Referenced wave files not cooked. A MetaSound graph references SoundWave assets as inputs. If those wave files are in a directory not scanned by the cooker and have no other hard references, they are excluded. The MetaSound cooks but its audio sources are missing.
MetaSound module not linked in C++. C++ projects that interact with MetaSound programmatically need MetasoundEngine in their module dependencies. Without it, MetaSound runtime initialization may be incomplete in packaged builds even though the editor initializes it automatically.
Audio Component not using correct sound class. If you assign a MetaSound to a UAudioComponent via SetSound at runtime with a soft reference that has not loaded, the component plays nothing. Unlike SoundCues, MetaSounds loaded async may not be ready when Play is called.
Platform audio format mismatch. MetaSound wave table inputs may reference formats not supported on the target platform. The cooker converts them, but if conversion fails, the cooked MetaSound has silent inputs.
The Fix
Step 1: Add MetaSound directories to Always Cook.
// In DefaultGame.ini:
[/Script/UnrealEd.ProjectPackagingSettings]
+DirectoriesToAlwaysCook=(Path="/Game/Audio/MetaSounds")
+DirectoriesToAlwaysCook=(Path="/Game/Audio/Waves")
This ensures all MetaSound assets and their source wave files are included in the cook regardless of reference chains.
Step 2: Use hard references for critical audio.
// Hard reference ensures cooking:
UPROPERTY(EditDefaultsOnly, Category = "Audio")
USoundBase* FootstepSound; // Assign MetaSound in Blueprint defaults
// Avoid soft references for audio that must play immediately:
// TSoftObjectPtr<USoundBase> - may not be loaded when needed
// Playing with hard reference:
UGameplayStatics::PlaySoundAtLocation(
this, FootstepSound, GetActorLocation());
Hard UPROPERTY references in Blueprints or C++ classes that exist in cooked maps automatically include the MetaSound in the cook.
Step 3: Add module dependencies in Build.cs.
// YourProject.Build.cs
PublicDependencyModuleNames.AddRange(new string[]
{
"Core",
"CoreUObject",
"Engine",
"MetasoundEngine", // Required for MetaSound runtime
"MetasoundFrontend", // Required for parameter interfaces
"AudioExtensions"
});
Without these modules, MetaSound graph execution may silently fail in packaged builds. The editor includes them implicitly but packaged games do not.
Step 4: Ensure async loading completes before playback.
// If using soft references, load before playing:
TSoftObjectPtr<USoundBase> MetaSoundRef;
void AMyActor::PlayMetaSound()
{
if (!MetaSoundRef.IsValid())
{
// Request synchronous load
MetaSoundRef.LoadSynchronous();
}
if (USoundBase* Sound = MetaSoundRef.Get())
{
AudioComponent->SetSound(Sound);
AudioComponent->Play();
}
}
Verifying Cook Output
After packaging, check the cook log for MetaSound assets. Search for “LogCook” entries mentioning your MetaSound paths. Missing assets show as warnings or are absent from the cooked asset registry. Use -log launch parameter to see runtime asset loading:
// Launch with logging:
// MyGame.exe -log
// Search output for: LogAudio, LogMetaSound
// Missing assets show: "Failed to find MetaSound asset"
“PIE lies about asset availability. It loads everything. Packaged builds only load what the cooker included. Hard references or explicit cook paths are the only guarantees.”
Related Issues
For level content not loading in packaged builds, see Level Instance Not Loading. For GameplayCue audio not firing on clients, see GameplayCue Not Firing on Client.
Always Cook directory, hard references, MetasoundEngine module, sync load before play. Audio ships correctly.