The broadcast extension chunk of the European Broadcasting Union’s Broadcast Wave Format
(EBU Tech 3285) records who made the audio, when, where it sits in time and how loud it
is. Tech 3285 defines it for little-endian RIFF files; a RIFX file can carry the same
chunk with its numbers big-endian, and the explorer reads it that way. No RIFX file with a
bext chunk is known to the site, so this is the layout as the explorer
applies it, not one seen in files.
Fields
Text fields are ASCII, padded with NULs, and are not affected by byte order. Offsets are from the start of the chunk’s data, and numbers are big-endian. The fixed part is 602 bytes, the minimum size libsndfile accepts; the explorer reports a shorter chunk.
| Offset | Size | Type | Name | Description |
|---|---|---|---|---|
| 0 | 256 | char[256] | Description | a free text description of the audio |
| 256 | 32 | char[32] | Originator | the organisation or person that made it, often the software |
| 288 | 32 | char[32] | OriginatorReference | a unique reference given by the originator |
| 320 | 10 | char[10] | OriginationDate | the date, as yyyy-mm-dd |
| 330 | 8 | char[8] | OriginationTime | the time, as hh-mm-ss |
| 338 | 4 | u32 | TimeReferenceLow | the low 32 bits of the time reference |
| 342 | 4 | u32 | TimeReferenceHigh | the high 32 bits |
| 346 | 2 | u16 | Version | 0, 1 or 2 |
| 348 | 64 | bytes | UMID | a SMPTE unique material identifier, from version 1; zeros in version 0 |
| 412 | 2 | i16 | LoudnessValue | integrated loudness in LUFS × 100, version 2 |
| 414 | 2 | i16 | LoudnessRange | loudness range in LU × 100, version 2 |
| 416 | 2 | i16 | MaxTruePeakLevel | maximum true peak in dBTP × 100, version 2 |
| 418 | 2 | i16 | MaxMomentaryLoudness | highest momentary loudness in LUFS × 100, version 2 |
| 420 | 2 | i16 | MaxShortTermLoudness | highest short-term loudness in LUFS × 100, version 2 |
| 422 | 180 | bytes | Reserved | zeros |
| 602 | varies | char[] | CodingHistory | lines of text recording each step the audio went through |
A loudness value of 0x7FFF means it was not measured; the explorer leaves
it out.
Versions
| Version | Year | Change |
|---|---|---|
| 0 | 1997 | the first Broadcast Wave Format, with 254 reserved bytes after Version |
| 1 | 2001 | the first 64 of the reserved bytes become the UMID |
| 2 | 2011 | the next 10 become the loudness values, measured as EBU R 128 sets out |
Each version only takes over reserved bytes, so a reader of one version reads the others; version 2 is meant to stay compatible with 0 and 1.
Date and time
OriginationDate is ten characters, yyyy-mm-dd, and
OriginationTime eight, hh-mm-ss. Tech 3285 recommends the
separators hyphen, underscore, colon, space and full stop; the explorer accepts any
character that is not a digit, and reports a field that is not in that form.
Time reference
The time reference places the recording on a clock: it is the position of the first sample, counted in samples since midnight. Divide it by the sample rate to get seconds. Editors use it to line up files recorded at the same time on different machines.
It is stored as two 32-bit halves, low half first. In a RIFX file each half is
big-endian, so the eight bytes do not read as one big-endian 64-bit number: the value is
TimeReferenceHigh × 232 + TimeReferenceLow, which
is how the explorer works it out. For example, 172,992,000 samples
(0x0A4FA600) at 48,000 Hz is 3,604 seconds, 01:00:04; it would be stored
0A 4F A6 00 00 00 00 00.
Coding history
Each line of CodingHistory describes one stage, as comma-separated
values such as the coding algorithm (A=PCM), the sample rate
(F=48000), the word length (W=24) and the mode
(M=stereo), ending in a carriage return and line feed. It runs to the end
of the chunk.