Eclipsa Audio and IAMF reference

The open IAMF container: audio elements, mix presentations, codecs, profiles and how Eclipsa Audio uses it.

This page is a technical reference for IAMF, the Immersive Audio Model and Formats specification from the Alliance for Open Media (AOMedia), and for Eclipsa Audio, the consumer name under which Google and Samsung launched IAMF in January 2025. It covers the bitstream structure, audio element types, mix presentations, profiles, codecs, MP4 carriage, the open-source reference tools and the export options Spatial9 offers.

It is written for audio engineers, developers building players or pipelines, and anyone who needs to know exactly what an Eclipsa Audio file contains. If you only need to publish a file, see Publishing and delivery.

IAMF at a glance

FeatureValue
Full nameImmersive Audio Model and Formats
PublisherAlliance for Open Media (AOMedia)
Consumer nameEclipsa Audio
Specification versionsv1.0.0 (2023), v1.1.0 (2024), v2.0.0 (approved 24 August 2026)
Packet unitOBU (Open Bitstream Unit) with a 5-bit type
CodecsOpus, AAC-LC, FLAC, LPCM
Audio element typesChannel-based, scene-based (Ambisonics), object-based from v2.0.0
Largest channel layouts9.1.6, 7.1.5.4 and 22.2 (10.2.9.3 in v2.0.0)
AmbisonicsUp to 14th order, 225 channels
RenderingOpen Audio Renderer (OAR) specification, speakers or binaural
ContainerStandalone .iamf file, or MP4 with an iamf sample entry
Reference softwareiamf-tools (encoder, decoder, web demo) and libiamf (decoder)
LicenceBSD 3-Clause Clear License plus AOM Patent License 1.0, royalty-free

Openness and licensing

IAMF follows the model of AV1, AOMedia's video codec: a public specification, royalty-free use and open-source reference code.

  • Specification and reference software. The specification is public, and the libiamf decoder and conformance streams are published on the AOMediaCodec GitHub organisation.
  • Creation tools. Google released an open-source Eclipsa Audio plugin for DAWs and video editors in June 2025; the open-source EAR Production Suite also works.
  • Patents. The code is BSD licensed and AOM members grant a royalty-free patent licence, so you pay nothing to create, distribute or play IAMF.

Spatial9 joined AOMedia on April 16, 2025 and contributes to its open audio work, including IAMF.

Bitstream architecture

An IAMF file is called an IA Sequence. It begins with descriptor OBUs that tell the decoder everything it needs before the first sample, followed by a run of temporal units. Each temporal unit holds the Parameter Blocks and Audio Frames for one slice of time.

Structure of an IA Sequence: descriptor OBUs followed by temporal units of Parameter Blocks and Audio Frames
An IA Sequence starts with descriptor OBUs, then repeats temporal units until the end of the track.

OBU types

Type valueOBURole
31IA Sequence HeaderStarts the stream and declares the profiles
0Codec ConfigCodec and its settings
1Audio ElementOne channel-based, scene-based or object-based element
2Mix PresentationHow elements are combined, rendered and normalised
3Parameter BlockTime-varying values such as gains, demixing and positions
4Temporal DelimiterBoundary between moments in time
5Audio FrameCoded audio with an explicit substream ID
6 to 23Audio Frame Id0 to Id17Coded audio whose substream ID is implied by the type
24MetadataITU-T T.35 data and IAMF tags (v2.0.0)

Sequence Header, Codec Config, Audio Element and Mix Presentation are the descriptor OBUs.

IA Sequence Header

The sequence header holds a 32-bit ia_code, always the four characters iamf, plus primary_profile and additional_profile. The primary profile is what a decoder must support to play the stream. The additional profile names a richer profile that a more capable decoder can use, so one stream can serve a basic decoder and a full home theatre decoder.

Profiles

Profiles cap stream complexity so device makers know what they must support.

ProfileValueIntroducedMax channelsMax audio elementsTypical use
Simple0v1.0.0161One third-order Ambisonics scene or one channel layout
Base1v1.0.0182A scene plus a stereo element such as narration
Base-Enhanced2v1.1.02828Third-order Ambisonics plus a 7.1.4 bed
Base-Advanced3v2.0.01818Object-only first mix, two codecs with one LPCM
Advanced-14v2.0.01818Any mix of channel, scene and object elements
Advanced-25v2.0.02828The same at the larger channel budget

A third-order Ambisonics scene has 16 channels and fits the Simple profile exactly. Google's example YouTube video combines third-order Ambisonics for ambience with a stereo narration element, 18 channels in total, which requires the Base profile.

Codecs

The Codec Config OBU declares a four-character codec_id, the number of samples per frame and an audio_roll_distance.

Codeccodec_idTypeRecon gainTypical use
OpusOpusLossy, open, royalty-freeYesStreaming, where bandwidth matters most
AAC-LCmp4aLossy, widely supportedYesDevices and pipelines built around AAC
FLACfLaCLosslessNot neededHigh-quality delivery and archiving
LPCMipcmUncompressedNot neededProduction, testing, highest-fidelity paths

In v1.x a sequence uses one codec. In v2.0.0 a sequence may contain two Codec Config OBUs, provided one of them is LPCM.

Audio elements

An audio element is one piece of content rendered as a unit, such as a 7.1.4 bed, an Ambisonics scene, a commentary track or a moving object. Each element references a codec config, lists its substreams and declares its parameters. Parameter definitions with a type above 9 carry their own size, so older decoders can skip types they do not understand; this is how v2.0.0 added object positions without breaking v1 decoders.

Element typeValueConfigurationAvailable from
Channel-based0Scalable channel layout configv1.0.0
Scene-based1Ambisonics configv1.0.0
Object-based2Objects configv2.0.0

Channel-based elements and scalable layouts

A channel-based element is a stack of up to six channel layers, each adding speakers to the one below. A device with two speakers decodes only the stereo layer; a 7.1.4 system decodes every layer and rebuilds the full layout.

loudspeaker_layoutLayoutChannel order
0MonoC
1StereoL/R
25.1L/C/R/Ls/Rs/LFE
35.1.2L/C/R/Ls/Rs/Ltf/Rtf/LFE
45.1.4L/C/R/Ls/Rs/Ltf/Rtf/Ltr/Rtr/LFE
57.1L/C/R/Lss/Rss/Lrs/Rrs/LFE
67.1.2L/C/R/Lss/Rss/Lrs/Rrs/Ltf/Rtf/LFE
77.1.4L/C/R/Lss/Rss/Lrs/Rrs/Ltf/Rtf/Ltb/Rtb/LFE
83.1.2L/C/R/Ltf/Rtf/LFE
9BinauralL/R
15ExpandedSelects from a second table of 20 layouts

The expanded table includes 9.1.6, 22.2 and, in v2.0.0, 7.1.5.4 with bottom speakers. coupled_substream_count tells the codec how many substreams are stereo pairs, which Opus and AAC-LC code more efficiently than two mono channels.

Demixing and reconstruction gain

When a scalable element plays on its full layout, the decoder rebuilds surround and height channels from the downmixed lower layers. Because lossy codecs smear energy between channels, the encoder also sends reconstruction gain, a per-channel correction. Reconstruction gain is used only with Opus and AAC-LC; with FLAC or LPCM, demixing is exact.

Scene-based elements

Scene-based elements carry Ambisonics. An order-N scene has (N + 1)² channels, and IAMF accepts orders 0 to 14. See Ambisonics for orders, channel ordering and normalisation.

ModeHow channels are codedNotes
MonoEach Ambisonics channel as its own substreamchannel_mapping can mark channels silent so they cost nothing; required for LPCM
ProjectionA matrixed version of the sceneSends a demixing_matrix to restore Ambisonics; can save bits

Both modes follow RFC 8486, the Opus Ambisonics specification.

Object-based elements

Object-based elements were added in v2.0.0. num_objects is 1 for a mono substream or 2 for a stereo substream carrying two objects. Positions travel in parameter blocks using six new parameter definitions: polar, Cartesian 8-bit, Cartesian 16-bit and a dual version of each.

Parameter blocks and animation

Anything that changes over time is sent as a Parameter Block OBU. An audio element or mix presentation declares a parameter definition with an ID, and blocks with that ID update it. Each block is divided into subblocks, each carrying an animated value.

Animation typeData carried
StepStart value
LinearStart and end values
BezierStart, end and control values plus control point time
Inter-linearEnd value, continuing from the previous subblock
Inter-BezierEnd and control values, continuing from the previous subblock

The same template is used for mix gains and object positions.

Mix presentations

A mix presentation is the finished experience a listener selects. It lists which audio elements play, the gain applied to each, an overall output gain, the rendering configuration and loudness information. A stream can carry several, for example a full mix and a dialogue-forward mix. In v2.0.0 a presentation can contain a second sub-mix, intended for system sounds.

Headphone rendering modes

headphones_rendering_modeBehaviour
0Channel-based audio to stereo; scenes and objects to world-locked binaural
1World-locked binaural for everything
2Head-locked binaural
3Reserved

Rendering to speakers and binaural is defined by the companion Open Audio Renderer (OAR) specification, so compliant players produce the same result. See Binaural rendering, headphones and speakers.

Loudness

Each sub-mix lists the layouts it was measured on, with loudness information for each. Integrated loudness and peak values are stored in Q7.8 fixed point. Optional fields add true peak, anchored loudness for dialogue and, in v2.0.0, momentary loudness. Players use these values to match levels without measuring the audio.

Output layouts

Output layouts use ITU-R BS.2051 naming, where 4+7+0 means four upper speakers, seven middle and none below.

libiamf sound systemBS.2051Common name
A0+2+0Stereo
B0+5+05.1
C2+5+05.1.2
D4+5+05.1.4
I0+7+07.1
J4+7+07.1.4
EXT_7122+7+07.1.2
EXT_3122+3+03.1.2
EXT_9166+9+09.1.6
H9+10+322.2

MP4 carriage and codecs string

IAMF is stored as a raw .iamf file or inside an MP4 (ISO BMFF) file. In MP4, the track uses an iamf sample entry holding an iacb configuration box with all descriptor OBUs. Each MP4 sample holds one temporal unit. The channelcount and samplerate fields of the sample entry are set to 0 and must be ignored, because one track can hold elements with different channel counts.

Web players check support with a codecs string of this form:

iamf.<primary_profile>.<additional_profile>.<codec>
iamf.000.000.Opus
iamf.001.001.Opus

The codec part is Opus, mp4a.40.2, fLaC or ipcm. On YouTube, Stats for nerds shows a string starting with iamf when the immersive version plays.

Reference software

ProjectLanguageContents
libiamfCReference decoder for IAMF v2.0.0, conformance test vectors, head tracking for binaural output
iamf-toolsC++Encoder and decoder API, command-line encoder, probe tool, browser web demo

Decoding with libiamf

The decoding flow follows the bitstream.

  1. Open a handle with IAMF_decoder_open.
  2. Select a profile with IAMF_decoder_set_profile.
  3. Select an output with IAMF_decoder_output_layout_set_sound_system or IAMF_decoder_output_layout_set_binaural.
  4. Optionally choose a presentation with IAMF_decoder_set_mix_presentation_id and a target with IAMF_decoder_set_normalization_loudness.
  5. Pass the descriptor OBUs to IAMF_decoder_configure.
  6. Pass each temporal unit to IAMF_decoder_decode, which returns the number of decoded samples.

A normalisation loudness of 0.0 turns normalisation off; the header gives -16 LUFS as a YouTube example. Head tracking takes a quaternion and affects binaural output only.

Encoding with iamf-tools

The command-line encoder reads WAV files, or an ADM BWF master with --adm_filename, plus a protocol buffer text configuration whose field names match the specification syntax.

bazel-bin/iamf/cli/encoder_main --user_metadata_filename=iamf/cli/testdata/test_000002.textproto --output_iamf_directory=.

Spatial9 export options

Spatial9 produces Eclipsa Audio files from stereo songs, stems or a Dolby Atmos ADM master, with profiles, loudness data and binaural settings handled for you. When converting from objects, Spatial9 uses motion-aware translation into a third-order Ambisonics scene of 16 components. See ADM to Eclipsa Audio.

For exports produced by Spatial9's own encoder (the stems and music Eclipsa pipelines and direct encode calls), you choose one of three codecs. All three produce a .iamf file.

Codec optionLosslessStreaming-safeProfileAccepted by YouTube
Opus (default)NoYesSimpleYes, required for YouTube and Eclipsa streaming
FLACYesNoBaseNo
LPCM, uncompressed 24-bitYesNoBaseNo

Next steps

Go deeper on the blog