Formats

BWF and iXML metadata explained: what lives inside a broadcast WAV

Published July 17, 2026 · 9 min read · Launchr Post Guides

Every professional sound roll is a WAV file carrying two hidden payloads: a bext chunk with a sample-accurate start time, and an iXML chunk with the scene, take, track names and frame rate that make dailies label themselves. Here is what each field means, how the time reference converts to timecode with real numbers, and which of it your NLE actually reads.

BWF is just WAV, plus discipline

A WAV file is a container of chunks: a fmt  chunk describing the audio, a data chunk holding the samples, and any number of optional chunks that software is free to ignore. Broadcast Wave Format (BWF), defined by the EBU in Tech 3285, adds exactly one mandatory chunk to plain WAV: bext, the broadcast extension. That is the whole trick — a BWF plays anywhere a WAV plays, because to anything that does not understand bext, it is a WAV.

Field recorders write a second, unofficial-but-universal chunk alongside it: iXML, an XML document embedded in the file, specified by an industry consortium rather than a standards body. In practice the two divide the work: bext answers “when did this file start”, iXML answers “what is it” — scene, take, roll, track names, and the frame-rate context bext famously lacks.

The bext chunk, field by field

The bext chunk is a fixed-layout binary structure. The fields that matter on a shoot:

TimeReference: one integer, sample-accurate

The time reference is deliberately simple: samples since midnight. Divide by the sample rate and you have the start time of day; convert that to a frame count and you have the start timecode. One worked example, at 48 kHz and 25 fps:

Two properties fall out of this design. First, it is sample-precise: the recorder knows its start to 1/48,000 of a second, while a camera’s timecode is only frame-precise — which is why, in a dual-system sync, the residual error belongs to the camera side. Second, it is context-dependent: the integer is meaningless until you know the sample rate it counts in, and — for display as timecode — the frame rate to divide it by. And here is the catch:

The bext chunk stores neither a frame rate nor a drop-frame flag. The sample rate at least lives next door in fmt , but the frame rate is simply absent from the standard. A tool that shows you 10:35:20:12 from a bare BWF has assumed a frame rate — and at 23.976 or 29.97 drop-frame, assumptions are how sound rolls end up minutes wrong by wrap. Fixing that gap is half the reason iXML exists.

iXML: the slate, machine-readable

iXML is a plain XML document stored in its own chunk. Because it is XML, it is extensible and human-readable — you can open a sound roll in a hex viewer and literally read the scene number. The sections a post workflow leans on:

What your NLE actually reads

Support is real but uneven, and knowing the gaps saves an afternoon:

The common denominator: the time reference is read nearly everywhere; the descriptive metadata survives only if your ingest path deliberately carries it forward.

How good metadata dies

BWF metadata is robust in the file and fragile in the pipeline. The usual killers:

Where Launchr Post fits

Launchr Post reads all of the above during ingest, on your own machine. The bext time reference — interpreted through the iXML SPEED section’s exact rates, not an assumption — drives timecode-first sync against the camera files; scene, take, tape and track names flow into the clip naming, the transcripts and the editor package; circled takes stay marked. When a file arrives stripped of its metadata, the sync falls back to LTC or waveform matching and the per-clip report says so — so you know which files carried their own identity and which were rescued.

See what your sound rolls know

Drop a shoot day into Launchr Post and inspect the decoded bext and iXML fields per file. It syncs, sorts and transcribes — then hands your editor the whole package.

Start free 7‑day trial Free 7‑day trial · everything runs on your Mac