The chunks not covered on the other pages. Each is optional, except that
kuki is required for formats that need it.
kuki: magic cookie
Data the codec needs, in a format of its own. For AAC, it is the contents of the
esds atom of an MPEG-4 file.
strg: strings
Named strings that other chunks refer to by ID.
| Offset | Size | Type | Name | Description |
|---|---|---|---|---|
| 0 | 4 | u32 | mNumEntries | the number of strings |
| 4 | 12 each | record | mStringsIDs | an ID and offset for each string, below |
| … | … | bytes | mStrings | the strings, each null-terminated UTF-8 |
| Offset | Size | Type | Name | Description |
|---|---|---|---|---|
| 0 | 4 | u32 | mStringID | the ID; 0 is best avoided |
| 4 | 8 | s64 | mStringStartByteOffset | its offset from the first byte after the last ID record |
info: information
Key-value text. The structure is the number of entries, as a u32, followed by each key and
then its value, all null-terminated UTF-8 strings.
| Key | Value |
|---|---|
tempo | tempo |
key signature | key |
time signature | time signature |
artist | artist |
album | album |
track number | track number |
year | year |
composer | composer |
lyricist | lyricist |
genre | genre |
title | title |
recorded date | date |
comments | comments |
copyright | copyright |
source encoder | source encoder |
encoding application | encoding application |
nominal bit rate | nominal bit rate |
channel layout | channel layout |
- Lower-case keys are reserved. An application’s own keys need at least one upper-case letter.
- A key ending in
datehas a time-of-day value in ISO 8601, in UTC. - A key starting with a full stop is not displayed, but should be kept.
- Each key appears once. Several values are separated by commas.
- Where a MIDI chunk conflicts with these values, the MIDI chunk wins.
inst: instrument
| Offset | Size | Type | Name | Description |
|---|---|---|---|---|
| 0 | 4 | f32 | mBaseNote | the MIDI note at which the sound plays unchanged: 60 is middle C, and the fraction is a pitch offset |
| 4 | 1 | u8 | mMIDILowNote | lowest note, 0 to 127 |
| 5 | 1 | u8 | mMIDIHighNote | highest note, 0 to 127 |
| 6 | 1 | u8 | mMIDILowVelocity | lowest velocity, 0 to 127 |
| 7 | 1 | u8 | mMIDIHighVelocity | highest velocity, 0 to 127 |
| 8 | 4 | f32 | mdBGain | gain in decibels; 0 is unchanged |
| 12 | 4 | u32 | mStartRegionID | the region played at the start |
| 16 | 4 | u32 | mSustainRegionID | the sustain region |
| 20 | 4 | u32 | mReleaseRegionID | the release region |
| 24 | 4 | u32 | mInstrumentID | the ID of its name in the strings chunk |
midi: MIDI data
A Standard MIDI File. It may carry tempo, key and time signature, or a MIDI version of
the audio. Its values override those in info.
edct: edit comments
Laid out like info: the number of entries, then pairs of strings. Each key
is a time of day in ISO 8601, in UTC, and each value a UTF-8 comment.
ovvw: overview
A reduced waveform for drawing the sound quickly.
| Offset | Size | Type | Name | Description |
|---|---|---|---|---|
| 0 | 4 | u32 | mEditCount | matches the data chunk’s edit count, so a stale overview can be detected |
| 4 | 4 | u32 | mNumFramesPerOVWSample | the number of audio frames per overview entry |
| 8 | 4 each | record | mData | one minimum and one maximum s16 per channel per entry |
peak: peak
The size of the chunk is 4 + 12 × channels.
| Offset | Size | Type | Name | Description |
|---|---|---|---|---|
| 0 | 4 | u32 | mEditCount | matches the data chunk’s edit count |
| 4 | 12 each | record | mPeaks | one per channel, below |
| Offset | Size | Type | Name | Description |
|---|---|---|---|---|
| 0 | 4 | f32 | mValue | the peak, normalised to −1.0 to 1.0 |
| 4 | 8 | u64 | mFrameNumber | where it occurs, from 0 |
umid: unique material identifier
Exactly 64 bytes, a SMPTE 330M-2004 identifier, and at most one in a file. Unused bytes in the source-pack half are 0.
uuid: user-defined
Lets an application store its own data. The data starts with a 16-byte UUID, and the
chunk’s size counts it. A parser ignores a UUID it does not know. If the data depends on
the audio, the application should store the data chunk’s edit count after
the UUID.
free: free space
Reserved space. Its contents are ignored.