SoundFont 2.04 Specification
Purpose
To understand the library API according to SoundFont 2.04 specification.
This section will alternate between specification summary and API documentation.
SoundFonts are RIFF files containing WAV samples, preset information and metadata. SoundFonts interact with MIDI to create a sound.
What is RIFF
RIFF is like JSON but binary - store nested binaries. It is a standard for other file formats like WAV.
Data is stored in chunks with metadata:
char[4] chunkId = "RIFF"; // 4 byte
uint32_t chunkBytes = 21772728; // 4 byte
char[4] format "sfbk"; // 4 byte if subchunk exists
byte[chunkBytes] chunkData = <anotherChunk>;chunkIdis a four-character code (FourCC) totalling 4 bytes.- Only trunk chunks with id
RIFFandLISTcan have subchunks, hence 12 byte metadata. - Leaf chunks have 8 byte metadata since format is not required.
- Only trunk chunks with id
chunkBytesis the amount of bytes in a chunk.formatspecifies format type sincechunkIdis already used for tracking subchunks.chunkDatacould be a a subchunk or contain data.- All chunks must contain even number of bytes.
SoundFont RIFF structure
Every SoundFont2 contain three nested top chunks:
ChunkId RIFF, format sfbk - RIFF file declaration
- ChunkId
LIST - Format
INFO - Contains
SoundFont3.metadataand:- ChunkId
LIST - Format
sdta - Contains
SoundFont3.sampleDataand:- ChunkId
LIST - Format
pdta - Contains
SoundFont3.presetData
- ChunkId
- ChunkId
Raw SoundFont RIFF chunks are accessed through SoundFont3.chunk.
Metadata
Accessible thorugh SoundFont3.metaData
ifil- SoundFont version -SoundFont3.metaData.versionisng- Sound engine -SoundFont3.metaData.soundEngineINAM- SoundFont bank -SoundFont3.metaData.nameThe other leaf chunks are optional
irom- Sound ROM samples reference -SoundFont3.metaData.romiver- Sound ROM revision -SoundFont3.metaData.romVersionICRD- Creation mm/dd/yy -SoundFont3.metaData.creationDateIENG- SoundFont author -SoundFont3.metaData.authorIPDR- For this product -SoundFont3.metaData.productICOP- Copyright -SoundFont3.metaData.copyrightICMT- Comments -SoundFont3.metaData.commentsISFT- Tool created SoundFont -SoundFont3.metaData.createdBy
Sample data
smpl- 16-bit WAV -SoundFont3.sampleDatasm24- Plus 8-bit WAV
Preset data
Available through SoundFont3.presetData
Preset metadata:
phdr- Headers -SoundFont3.presetData.presetHeaderspbag- Zone indices -SoundFont3.presetData.presetZonespmod- Modulators -SoundFont3.presetData.presetModulatorspgen- Generators -SoundFont3.presetData.presetGenerators
Instrument metadata:
inst- Headers -SoundFont3.presetData.instrumentHeadersibag- Zone indices -SoundFont3.presetData.instrumentZonesimod- Modulators -SoundFont3.presetData.instrumentModulatorsigen- Generators -SoundFont3.presetData.instrumentGenerators
Sample metadata:
shdr- Headers -SoundFont3.presetData.sampleHeaders