SND (AdLib)

From Video Game Music Preservation Foundation Wiki
Jump to: navigation, search
Ad Lib Sound Bank
SND (AdLib).png
Developer: Ad Lib, Inc.
Header: Custom
Content: Instrument
Instruments: Intrinsic
Target Output
Output - Digital Audio - No.png Output - MIDI - No.png Output - FM Synthesis.png Output - PSG - No.png
Released: 1988-06-29
First Game: Kung Fu Louie Vs. The Martial Art Posse (DOS)
  • *.snd
  • *.tim
  • *.tbr

An AdLib Sound Bank (SND) file doesn't store music, but it does contain the definitions for instruments to be played in MUS files. Since this format isn't actually an audio format, the list of players don't actually "play" SND files, but rather utilize them when playing a MUS file.

Technically the format is very similar to BNK, which in many ways can be regarded as the successor to this format. SND was developed first (1988) as a way of storing all the instruments necessary to play a single song, and then when the utility of this became apparent, BNK was developed (1989) which stores the data more efficiently and also adds additional fields to make managing instrument libraries easier.





SND to ?

? to SND



Since SND files do not store music, there are no samples, but this is a list of the games that use SND files.

Released Title
1989-??-?? Kung Fu Louie Vs. The Martial Art Posse (DOS)
1989-??-?? Weird Dreams (DOS)
1990-01-?? Avoid the Noid (DOS) (Version 1.1)
1990-??-?? DarkSpyre (DOS)
1990-??-?? DragonStrike (DOS)
1990-??-?? Faces ...tris III (DOS)
1990-??-?? X-Rock (DOS)
1991-??-?? Gobliiins (DOS)
1992-??-?? Balda (DOS)
1992-??-?? Color Lines (DOS)
1992-??-?? The Summoning (DOS)
1992-??-?? Vetka (DOS)
1993-??-?? Regatta (DOS)
1993-??-?? Veil of Darkness (DOS)
1994-??-?? Nine (DOS)
1994-??-?? Popo Car (DOS)
1995-??-?? Vinyl Goddess From Mars (DOS)


  • File size can be calculated with this formula:
FileSize = iInstCount * 65 + 6

File Header

Data type Name Description Default value
UINT8 iVerMajor Version major 1
UINT8 iVerMinor Version minor 0
UINT16LE iInstCount Instrument count
UINT16LE ofInstParams Offset to instrument parameters iInstCount * 9 + 6
SND_NAME[iInstCount] aInstNames Array of instrument names
SND_PARAM[iInstCount] aInstParams Array of instrument parameters

Instrument Names

Each instrument name is null-terminated ANSI string with 8 fixed characters (9 bytes per name).

Instrument Parameters

Instrument parameters are expressed with this structure:

Data type Name Description
SND_OPLREGS oplModulator Register values for the Modulator operator (op 0)
SND_OPLREGS oplCarrier Register values for the Carrier operator (op 1)
UINT16LE iModWaveSel Modulator wave select (OPL base register 0xE0)
UINT16LE iCarWaveSel Carrier wave select (OPL base register 0xE0)

The SND_OPLREGS structure is defined as:

Data type Name Description OPL base register
UINT16LE ksl Key scaling level 0x40 (bits 6-7)
UINT16LE multiple Frequency multiplier 0x20 (bits 0-3)
UINT16LE feedback Feedback [op 0 only, op 1 ignored] 0xC0 (bits 1-3)
UINT16LE attack Attack rate 0x60 (upper four bits)
UINT16LE sustain Sustain level 0x80 (upper four bits)
UINT16LE eg Envelope gain (nonzero value is on) 0x20 (bit 5)
UINT16LE decay Decay rate 0x60 (lower four bits)
UINT16LE releaseRate Release rate 0x80 (lower four bits)
UINT16LE totalLevel Total output level 0x40 (bit 0-5)
UINT16LE am Amplitude modulation (Tremolo) 0x20 (bit 7)
UINT16LE vib Frequency Vibrato 0x20 (bit 6)
UINT16LE ksr Key scaling/envelope rate 0x20 (bit 4)
UINT16LE con Connector [op 0 only, op 1 ignored] 0xC0 (bit 0, inverted)