MetaSounds is a high-performance, node-based audio system in Unreal Engine 5 that gives audio designers complete control over Digital Signal Processing (DSP) and procedural audio generation.
Channel Agnostic Types (CAT) allows MetaSound nodes to process audio without hard-coding a specific channel layout. For example, a single mixer node can mix mono, stereo, 7.1.4, or even ambisonics. The format is resolved at graph-compile time based on what you've connected.
Channel Agnostic Types
A default MetaSound uses one mono channel per pin. A stereo effect uses two Audio pins. A 5.1 effect uses six. For each of these, the graph has to be rebuilt if the channel count changes.
CAT replaces a single pin by carrying a multi-mono buffer plus the format that describes its channels. The channel format is represented as a JSON file that is populated at startup then looked up by name from a registry. A node that operates on CAT can therefore be written once, then reshape itself to whatever format you use.
Channel Formats
Channel formats are organized as a tree of abstract parents and concrete children. Cat:Stereo is abstract and means "some kind of stereo". It resolves to its default child Cat:Stereo2Dot0 when something needs a real buffer. That resolution is FindConcreteChannel(), and is what most nodes call.
There are three format families, each with different channel semantics:
| Family | Meaning | Examples |
|---|---|---|
Discrete | Speaker layout. Each channel has an ID, azimuth, elevation, and a spatialized flag. |
|
Soundfield | Ambisonics, described by order. Channel count derives from the order. |
|
Composite | A layout assembled from other layouts. | Placeholder only — see current experimental limitations. |
Thirty-four plain JSON schemas ship in Engine/Plugins/Experimental/MetasoundExperimental/Content/Schemas/ChannelAgnostic/ (25 discrete, 8 soundfield, 1 composite placeholder). Adding a file at that location adds a channel format. You can use this method to extend a project with a house layout that isn't included in the provided schemas.
Speaker Naming Conventions
Discrete channels use short speaker IDs that match EAudioMixerChannel:
FL- Front LeftFR- Front RightFC- Front CenterLFE- Low Frequency Effects?SL- Surround LeftSR- Surround RightBL- Back LeftBR- Back RightBC- Back CenterFLC- Front Left CenterFRC- Front Right CenterTFL- Top Front LeftTFR- Top Front RightTBL- Top Back LeftTBR- Top Back Right
These are what show up as pin names on Make and Break nodes, which is why those nodes read as speaker layouts rather than "Channel 0, Channel 1".
Source Code Location
The table below shows the filepath location of the core features of MetaSound CAT.
| Feature | File Path (relative to branch root) |
|---|---|
Core types, registry, transcoding |
|
MetaSound datatypes + schema loading |
|
Source output-format integration |
|
Nodes (Make, Break, Mixer, Cast, Panner, …) |
|
Wave Player, Sound Wave Container |
|
Format schemas |
|
CAT Node Types
CAT Make Node
CAT Make Node — "A node that builds CATs". Class: Experimental.CatMakeOperator.
CAT Make Nodes serve as the nodes that build CATs. CAT Make Nodes take one Audio input per channel of the chosen format and pack them into a single CAT output. This is the boundary node between conventional per-channel MetaSound audio and CAT.
Configuration
Format |
| Any non-abstract format from the registry ( |
Pins
The node reshapes when the channel format changes:
Inputs: One Audio pin per channel, named after the speaker (
FL, FR, LFE, …). Formats with no channel names fall back toIn 0, In 1, …Output:
Output, typed as the concrete format.
Behavior
Make Nodes are a straight per-channel copy — input n becomes channel n of the output. No gain, no transcoding, no reordering beyond what the format's channel order already defines.
If the configured format can't be resolved in the registry, the node builds as a no-op, which is the symptom to look for when the plugin is enabled but a project-specific schema is missing.
Cat Break Node
CAT Break Node — "A Node that Breaks CATs". Class: Experimental.CatBreakOperator.
CAT Break Nodes are the inverse of Make with one important difference: Break transcodes. Its Format property describes the layout you want out, and if the incoming CAT is a different format Break converts rather than failing.
Configuration
Format |
| The layout to break out to |
Transcode Method |
| The method of how to reconcile a mismatched input. |
Mix Method |
| Only shown when Transcode Method is |
Pins
Input:
Input, typed as the configured format, accepts any CAT as it's transcoded on the way in.Outputs: one
Audiopin per channel, named after the speaker.
When input and output formats match, the transcoder resolves to a plain copy, so there's no additional computational cost in that case.
CAT Mixer Node
CAT Mixer Node. Class: CatAudioMixer.CAT Mixer Node
The CAT Mixer Node sums ‘n’ CAT inputs with per-input gain, transcoding each one into the output format first. This is the node that makes format-mixed graphs work: you can feed it a mono source, a stereo source and an ambisonic bed, and it will reconcile them.
Configuration
Mix Format Method |
| How the output format is chosen. |
Cat Casting Method |
| How each input is transcoded into that format. |
Channel Map Mono Upmix Method |
| Only shown when casting method is |
Custom Mix Format |
| Only shown when Mix Format Method is |
Num Inputs | 1 | 1–100; adds a Cat/Gain pin pair each |
Mix Format Method options:
Highest Num Channels - output matches whichever input has the most channels.
Lowest Num Channels - output matches whichever input has the fewest.
Custom - pin the output to a named format.
Pins
In 0 / Gain 0, In 1 / Gain 1, … up toNum InputsA single
Output.
Gains default to 1.0 and are interpolated across the block from their previous value, so automating a gain doesn't zipper.
Behaviour
The Mixer node performs the same actions per input block: zero the output, then for each input transcode into a scratch buffer of the output format and mix in with the gain ramp.
Resolving Format Mismatches
Break, Mixer and Cast nodes all share one mechanism. Given a from format and a to format, the transcoder resolver picks an implementation for that family pair: discrete > discrete, soundfield > discrete, and so on, for all nine combinations.
Two methods control what happens when channel counts differ:
Channel Drop (default) — Matched channels pass through, unmatched source channels are discarded, and unmatched destination channels are silent. Cheap and predictable; nothing is invented and nothing is folded.
Mix Up or Down — Properly folds down or spreads up using the channel-map machinery. When upmixing from mono, the Mix Method picks the law:
EqualPower(default),Linear, orFullVolume.
Same-format transcodes collapse to a copy.
Retrieving a CAT From a MetaSound Source
A UMetaSoundSource can render a CAT graph directly. With the experimental plugin enabled, Output Format gains Channel Agnostic (Experimental), which exposes two more properties:
Source Format (exp) |
| Auto derives the format from the source's content. |
Custom Format Name | e.g. | Only used when Custom. |
The Custom Format Name dropdown only offers the five layouts the audio mixer can actually interleave — Mono 1.0, Stereo 2.0, Quad 4.0, 5.1, and 7.1.
The registry knows about both Atmos and Ambisonics up to the 7th order. You can move those formats around inside a graph, but a source cannot output them in 5.8.
Current Experimental Limitations
The MetaSound CAT plugin is currently in an Experimental state. Some aspects of the plugin functionality exist in a limited state. ,Those limitations are listed below:
Composite family is a placeholder. The type, schema struct and transcoder overloads exist, The shipped schema is a stub with a single channel.
Mixer's "Metasound Output" format method is currently non-functional, This falls through to Highest.
CAT is C++ and graph-authoring only. No Blueprint functionality is available.
Sources are limited to the five mixer layouts.
Schemas will load from loose JSON at module startup.
API stability. Every public entry point is
UE_EXPERIMENTAL(5.8, ...). Using it from game code needsPRAGMA_DISABLE_EXPERIMENTAL_WARNINGSand an acceptance that it will break.
Troubleshooting
The MetasoundExperimental plugin is off by default (EnabledByDefault: false, IsExperimentalVersion: true).
With it disabled you get:
No CAT nodes are in the node palette. If a graph already references one, MetaSounds shows the node's missing-node prompt: Enable the MetaSoundExperimental Plugin.
There are no concrete formats.
AudioChannelAgnosticCorealways registers the four abstract roots (Cat,Cat:Discrete,Cat:Soundfield,Cat:Composite), but the 34 concrete formats are loaded by the plugin's runtime module at startup, so the registry is effectively empty without it.There is no
Channel Agnostic (Experimental)entry on a MetaSound source Output Format dropdown. The enum value is marked asHidden, and the details customization only offers it whenIPluginManager::FindEnabledPlugin("MetasoundExperimental")succeeds.There is no Sound Wave Container asset type.
To enable the MetaSounds Experimental plugin:
Select Edit > Plugins in the top navigation menu
Search for Metasounds Experimental. Check the box to enable the plugin.
Restart your project to enable the plugin.