#------------------------------------------------------------------------------
# $File: audio,v 1.127 2023/03/05 20:15:49 christos Exp $
# audio:  file(1) magic for sound formats (see also "iff")
#
# Jan Nicolai Langfeldt ([email protected]), Dan Quinlan ([email protected]),
# and others
#

# Sun/NeXT audio data
0       string          .snd            Sun/NeXT audio data:
>12     belong          1               8-bit ISDN mu-law,
!:mime  audio/basic
>12     belong          2               8-bit linear PCM [REF-PCM],
!:mime  audio/basic
>12     belong          3               16-bit linear PCM,
!:mime  audio/basic
>12     belong          4               24-bit linear PCM,
!:mime  audio/basic
>12     belong          5               32-bit linear PCM,
!:mime  audio/basic
>12     belong          6               32-bit IEEE floating point,
!:mime  audio/basic
>12     belong          7               64-bit IEEE floating point,
!:mime  audio/basic
>12     belong          8               Fragmented sample data,
>12     belong          10              DSP program,
>12     belong          11              8-bit fixed point,
>12     belong          12              16-bit fixed point,
>12     belong          13              24-bit fixed point,
>12     belong          14              32-bit fixed point,
>12     belong          18              16-bit linear with emphasis,
>12     belong          19              16-bit linear compressed,
>12     belong          20              16-bit linear with emphasis and compression,
>12     belong          21              Music kit DSP commands,
>12     belong          23              8-bit ISDN mu-law compressed (CCITT G.721 ADPCM voice enc.),
!:mime  audio/x-adpcm
>12     belong          24              compressed (8-bit CCITT G.722 ADPCM)
>12     belong          25              compressed (3-bit CCITT G.723.3 ADPCM),
>12     belong          26              compressed (5-bit CCITT G.723.5 ADPCM),
>12     belong          27              8-bit A-law (CCITT G.711),
>20     belong          1               mono,
>20     belong          2               stereo,
>20     belong          4               quad,
>16     belong          >0              %d Hz

# DEC systems (e.g. DECstation 5000) use a variant of the Sun/NeXT format
# that uses little-endian encoding and has a different magic number
0       lelong          0x0064732E      DEC audio data:
>12     lelong          1               8-bit ISDN mu-law,
!:mime  audio/x-dec-basic
>12     lelong          2               8-bit linear PCM [REF-PCM],
!:mime  audio/x-dec-basic
>12     lelong          3               16-bit linear PCM,
!:mime  audio/x-dec-basic
>12     lelong          4               24-bit linear PCM,
!:mime  audio/x-dec-basic
>12     lelong          5               32-bit linear PCM,
!:mime  audio/x-dec-basic
>12     lelong          6               32-bit IEEE floating point,
!:mime  audio/x-dec-basic
>12     lelong          7               64-bit IEEE floating point,
!:mime  audio/x-dec-basic
>12     belong          8               Fragmented sample data,
>12     belong          10              DSP program,
>12     belong          11              8-bit fixed point,
>12     belong          12              16-bit fixed point,
>12     belong          13              24-bit fixed point,
>12     belong          14              32-bit fixed point,
>12     belong          18              16-bit linear with emphasis,
>12     belong          19              16-bit linear compressed,
>12     belong          20              16-bit linear with emphasis and compression,
>12     belong          21              Music kit DSP commands,
>12     lelong          23              8-bit ISDN mu-law compressed (CCITT G.721 ADPCM voice enc.),
!:mime  audio/x-dec-basic
>12     belong          24              compressed (8-bit CCITT G.722 ADPCM)
>12     belong          25              compressed (3-bit CCITT G.723.3 ADPCM),
>12     belong          26              compressed (5-bit CCITT G.723.5 ADPCM),
>12     belong          27              8-bit A-law (CCITT G.711),
>20     lelong          1               mono,
>20     lelong          2               stereo,
>20     lelong          4               quad,
>16     lelong          >0              %d Hz

# Creative Labs AUDIO stuff
0       string  MThd                    Standard MIDI data
!:mime  audio/midi
>8      beshort x                       (format %d)
>10     beshort x                       using %d track
>10     beshort         >1              \bs
>12     beshort&0x7fff  x               at 1/%d
>12     beshort&0x8000  >0              SMPTE

0       string  CTMF                    Creative Music (CMF) data
!:mime  audio/x-unknown
0       string  SBI                     SoundBlaster instrument data
!:mime  audio/x-unknown
0       string  Creative\ Voice\ File   Creative Labs voice data
!:mime  audio/x-unknown
# is this next line right?  it came this way...
>19     byte    0x1A
>23     byte    >0                      - version %d
>22     byte    >0                      \b.%d

# first entry is also the string "NTRK"
0       belong          0x4e54524b      MultiTrack sound data
>4      belong          x               - version %d

# Extended MOD format (*.emd) (Greg Roelofs, [email protected]); NOT TESTED
# [based on posting 940824 by "Dirk/Elastik", [email protected]]
0       string          EMOD            Extended MOD sound data,
>4      byte&0xf0       x               version %d
>4      byte&0x0f       x               \b.%d,
>45     byte            x               %d instruments
>83     byte            0               (module)
>83     byte            1               (song)

# Real Audio (Magic .ra\0375)
0       belong          0x2e7261fd      RealAudio sound file
!:mime  audio/x-pn-realaudio
0       string          .RMF\0\0\0      RealMedia file
!:mime  application/vnd.rn-realmedia
#video/x-pn-realvideo
#video/vnd.rn-realvideo
#application/vnd.rn-realmedia
#       sigh, there are many mimes for that but the above are the most common.

# MTM/669/FAR/S3M/ULT/XM format checking [Aaron Eppert, [email protected]]
# Oct 31, 1995
# fixed by <[email protected]> 2003-06-24
# Too short...
#0      string          MTM             MultiTracker Module sound file
#0      string          if              Composer 669 Module sound data
#0      string          JN              Composer 669 Module sound data (extended format)
0       string          MAS_U           ULT(imate) Module sound data

#0      string          FAR             Module sound data
#>4     string          >\15            Title: "%s"

0x2c    string          SCRM            ScreamTracker III Module sound data
>0      string          >\0             Title: "%s"
!:mime  audio/x-s3m

# .stm before it got above .s3m extension
0x16    string          \!Scream\!      ScreamTracker Module sound data
>0      string          >\0             Title: "%s"

# Gravis UltraSound patches
# From <[email protected]>

0       string          GF1PATCH110\0ID#000002\0        GUS patch
0       string          GF1PATCH100\0ID#000002\0        Old GUS patch

# mime types according to http://www.geocities.com/nevilo/mod.htm:
#       audio/it        .it
#       audio/x-zipped-it       .itz
#       audio/xm        fasttracker modules
#       audio/x-s3m     screamtracker modules
#       audio/s3m       screamtracker modules
#       audio/x-zipped-mod      mdz
#       audio/mod       mod
#       audio/x-mod     All modules (mod, s3m, 669, mtm, med, xm, it, mdz, stm, itz, xmz, s3z)

#
# Taken from loader code from mikmod version 2.14
# by Steve McIntyre ([email protected])
# <[email protected]> added title printing on 2003-06-24
0       string  MAS_UTrack_V00
>14     string  >/0             ultratracker V1.%.1s module sound data
!:mime  audio/x-mod
#audio/x-tracker-module

0       string  UN05            MikMod UNI format module sound data

0       string  Extended\ Module: Fasttracker II module sound data
!:mime  audio/x-mod
#audio/x-tracker-module
>17     string  >\0             Title: "%s"

21      string/c        =!SCREAM!       Screamtracker 2 module sound data
!:mime  audio/x-mod
#audio/x-screamtracker-module
21      string  BMOD2STM        Screamtracker 2 module sound data
!:mime  audio/x-mod
#audio/x-screamtracker-module

1080    string  \!PM!           4-channel Protracker module sound data
!:mime  audio/x-mod
#audio/x-protracker-module
>0      string  >\0             Title: "%s"

1080    string  M.K.            4-channel Protracker module sound data
!:mime  audio/x-mod
#audio/x-protracker-module
>0      string  >\0             Title: "%s"

1080    string  M!K!            4-channel Protracker module sound data
!:mime  audio/x-mod
#audio/x-protracker-module
>0      string  >\0             Title: "%s"

1080    string  FLT4            4-channel Startracker module sound data
!:mime  audio/x-mod
#audio/x-startracker-module
>0      string  >\0             Title: "%s"

1080    string  FLT8            8-channel Startracker module sound data
!:mime  audio/x-mod
#audio/x-startracker-module
>0      string  >\0             Title: "%s"

1080    string  4CHN            4-channel Fasttracker module sound data
!:mime  audio/x-mod
#audio/x-fasttracker-module
>0      string  >\0             Title: "%s"

1080    string  6CHN            6-channel Fasttracker module sound data
!:mime  audio/x-mod
#audio/x-fasttracker-module
>0      string  >\0             Title: "%s"

1080    string  8CHN            8-channel Fasttracker module sound data
!:mime  audio/x-mod
#audio/x-fasttracker-module
>0      string  >\0             Title: "%s"

1080    string  CD81            8-channel Octalyser module sound data
!:mime  audio/x-mod
#audio/x-octalysertracker-module
>0      string  >\0             Title: "%s"

1080    string  OKTA            8-channel Octalyzer module sound data
!:mime  audio/x-mod
#audio/x-octalysertracker-module
>0      string  >\0             Title: "%s"

# Not good enough.
#1082   string  CH
#>1080  string  >/0             %.2s-channel Fasttracker "oktalyzer" module sound data
1080    string  16CN            16-channel Taketracker module sound data
!:mime  audio/x-mod
#audio/x-taketracker-module
>0      string  >\0             Title: "%s"
1080    string  32CN            32-channel Taketracker module sound data
!:mime  audio/x-mod
#audio/x-taketracker-module
>0      string  >\0             Title: "%s"

# TOC sound files -Trevor Johnson <[email protected]>
#
0       string          TOC             TOC sound file

# sidfiles <[email protected]>
# added name,author,(c) and new RSID type by <[email protected]> 2003-06-24
0       string          SIDPLAY\ INFOFILE       Sidplay info file

0       string          PSID                    PlaySID v2.2+ (AMIGA) sidtune
>4      beshort         >0                      w/ header v%d,
>14     beshort         =1                      single song,
>14     beshort         >1                      %d songs,
>16     beshort         >0                      default song: %d
>0x16   string          >\0                     name: "%s"
>0x36   string          >\0                     author: "%s"
>0x56   string          >\0                     copyright: "%s"

0       string          RSID                    RSID sidtune PlaySID compatible
>4      beshort         >0                      w/ header v%d,
>14     beshort         =1                      single song,
>14     beshort         >1                      %d songs,
>16     beshort         >0                      default song: %d
>0x16   string          >\0                     name: "%s"
>0x36   string          >\0                     author: "%s"
>0x56   string          >\0                     copyright: "%s"

# IRCAM sound files - Michael Pruett <[email protected]>
# http://www-mmsp.ece.mcgill.ca/documents/AudioFormats/IRCAM/IRCAM.html
0       belong          0x64a30100              IRCAM file (VAX little-endian)
0       belong          0x0001a364              IRCAM file (VAX big-endian)
0       belong          0x64a30200              IRCAM file (Sun big-endian)
0       belong          0x0002a364              IRCAM file (Sun little-endian)
0       belong          0x64a30300              IRCAM file (MIPS little-endian)
0       belong          0x0003a364              IRCAM file (MIPS big-endian)
0       belong          0x64a30400              IRCAM file (NeXT big-endian)
0       belong          0x64a30400              IRCAM file (NeXT big-endian)
0       belong          0x0004a364              IRCAM file (NeXT little-endian)

# NIST SPHERE <[email protected]>
0       string          NIST_1A\n\ \ \ 1024\n   NIST SPHERE file

# Sample Vision <[email protected]>
0       string          SOUND\ SAMPLE\ DATA\    Sample Vision file

# Audio Visual Research <[email protected]>
0       string          2BIT                    Audio Visual Research file,
>12     beshort         =0                      mono,
>12     beshort         =-1                     stereo,
>14     beshort         x                       %d bits
>16     beshort         =0                      unsigned,
>16     beshort         =-1                     signed,
>22     belong&0x00ffffff       x               %d Hz,
>18     beshort         =0                      no loop,
>18     beshort         =-1                     loop,
>21     ubyte           <128                    note %d,
>22     byte            =0                      replay 5.485 KHz
>22     byte            =1                      replay 8.084 KHz
>22     byte            =2                      replay 10.971 KHz
>22     byte            =3                      replay 16.168 KHz
>22     byte            =4                      replay 21.942 KHz
>22     byte            =5                      replay 32.336 KHz
>22     byte            =6                      replay 43.885 KHz
>22     byte            =7                      replay 47.261 KHz

# SGI SoundTrack <[email protected]>
0       string          _SGI_SoundTrack         SGI SoundTrack project file
# ID3 version 2 tags <[email protected]>
0       string          ID3     Audio file with ID3 version 2
>3      byte            x       \b.%d
>4      byte            x       \b.%d
>>5     byte            &0x80   \b, unsynchronized frames
>>5     byte            &0x40   \b, extended header
>>5     byte            &0x20   \b, experimental
>>5     byte            &0x10   \b, footer present
>(6.I+10)       indirect        x       \b, contains:

# NSF (NES sound file) magic
0       string          NESM\x1a        NES Sound File
>14     string          >\0             ("%s" by
>46     string          >\0             %s, copyright
>78     string          >\0             %s),
>5      byte            x               version %d,
>6      byte            x               %d tracks,
>122    byte&0x2        =1              dual PAL/NTSC
>122    byte&0x1        =1              PAL
>122    byte&0x1        =0              NTSC

# NSFE (Extended NES sound file) magic
# http://slickproductions.org/docs/NSF/nsfespec.txt
# From: David Pflug <[email protected]>
0       string          NSFE            Extended NES Sound File
>48     search/0x1000   auth
>>&0    string          >\0             ("%s"
>>>&1   string          >\0             by %s
>>>>&1  string          >\0             \b, copyright %s
>>>>>&1 string          >\0             \b, ripped by %s
>20     byte            x               \b), %d tracks,
>18     byte&0x2        =1              dual PAL/NTSC
>18     byte&0x2        =0
>>18    byte&0x1        =1              PAL
>>18    byte&0x1        =0              NTSC

# Type: SNES SPC700 sound files
# From: Josh Triplett <[email protected]>
0       string  SNES-SPC700\ Sound\ File\ Data\ v       SNES SPC700 sound file
>&0     string  0.30                                    \b, version %s
>>0x23  byte    0x1B                                    \b, without ID666 tag
>>0x23  byte    0x1A                                    \b, with ID666 tag
>>>0x2E string  >\0                                     \b, song "%.32s"
>>>0x4E string  >\0                                     \b, game "%.32s"

# Impulse tracker module (audio/x-it)
0       string          IMPM            Impulse Tracker module sound data -
!:mime  audio/x-mod
>4      string          >\0             "%s"
>40     leshort         !0              compatible w/ITv%x
>42     leshort         !0              created w/ITv%x

# Imago Orpheus module (audio/x-imf)
60      string          IM10            Imago Orpheus module sound data -
>0      string          >\0             "%s"

# From <[email protected]>
# These are the /etc/magic entries to decode modules, instruments, and
# samples in Impulse Tracker's native format.

0       string          IMPS            Impulse Tracker Sample
>18     byte            &2              16 bit
>18     byte            ^2              8 bit
>18     byte            &4              stereo
>18     byte            ^4              mono
0       string          IMPI            Impulse Tracker Instrument
>28     leshort         !0              ITv%x
>30     byte            !0              %d samples

# Yamaha TX Wave:  file(1) magic for Yamaha TX Wave audio files
# From <[email protected]>
0       string          LM8953          Yamaha TX Wave
>22     byte            0x49            looped
>22     byte            0xC9            non-looped
>23     byte            1               33kHz
>23     byte            2               50kHz
>23     byte            3               16kHz

# scream tracker:  file(1) magic for Scream Tracker sample files
#
# From <[email protected]>
76      string          SCRS            Scream Tracker Sample
>0      byte            1               sample
>0      byte            2               adlib melody
>0      byte            >2              adlib drum
>31     byte            &2              stereo
>31     byte            ^2              mono
>31     byte            &4              16bit little endian
>31     byte            ^4              8bit
>30     byte            0               unpacked
>30     byte            1               packed

# audio
# From: Cory Dikkers <[email protected]>
0       string          MMD0            MED music file, version 0
0       string          MMD1            OctaMED Pro music file, version 1
0       string          MMD3            OctaMED Soundstudio music file, version 3
0       string          OctaMEDCmpr     OctaMED Soundstudio compressed file
0       string          MED             MED_Song
0       string          SymM            Symphonie SymMOD music file
#
# Track Length (TRL), Tracks (TRK), Samples (SMP), Subsongs (SS)
# http://lclevy.free.fr/exotica/ahx/ahxformat.txt
0       string          THX             AHX version
>3      byte            =0              1 module data
>3      byte            =1              2 module data
>11     ubyte           x               TRK: %u
>10     ubyte           x               TRL: %u
>12     ubyte           x               SMP: %u
>13     ubyte           x               SS: %u
>(4.H)          string          x               Title: "%.128s"

# header is mostly AHX format
0               string          HVL
>3              byte            <2      Hively Tracker Song
>3              byte            =0              v1 module data
>3              byte            =1              v2 module data
>11             ubyte           x               TRK: %u
>10             ubyte           x               TRL: %u
>12             ubyte           x               SMP: %u
>13             ubyte           x               SS: %u
>8              ubyte/4         =0              CHN: 4
>8              ubyte/4         >0              CHN: 4+%u
#>-0            offset          <0xffff
>(4.H)          string          x               Title: "%.128s"

#
0       string          OKTASONG        Oktalyzer module data
#
0       string          DIGI\ Booster\ module\0 %s
>20     byte            >0              %c
>>21    byte            >0              \b%c
>>>22   byte            >0              \b%c
>>>>23  byte            >0              \b%c
>610    string          >\0             \b, "%s"
#
0       string          DBM0            DIGI Booster Pro Module
>4      byte            >0              V%X.
>>5     byte            x               \b%02X
>16     string          >\0             \b, "%s"
#
0       string          FTMN            FaceTheMusic module
>16     string          >\0d            \b, "%s"

# From: <[email protected]> 2003-06-24
0       string          AMShdr\32       Velvet Studio AMS Module v2.2
0       string          Extreme         Extreme Tracker AMS Module v1.3
0       string          DDMF            Xtracker DMF Module
>4      byte            x               v%i
>0xD    string          >\0             Title: "%s"
>0x2B   string          >\0             Composer: "%s"
0       string          DSM\32          Dynamic Studio Module DSM
0       string          SONG            DigiTrekker DTM Module
0       string          DMDL            DigiTrakker MDL Module
0       string          PSM\32          Protracker Studio PSM Module
44      string          PTMF            Poly Tracker PTM Module
>0      string          >\32            Title: "%s"
0       string          MT20            MadTracker 2.0 Module MT2
0       string          RAD\40by\40REALiTY!! RAD Adlib Tracker Module RAD
0       string          RTMM            RTM Module
0x426   string          MaDoKaN96       XMS Adlib Module
>0      string          >\0             Composer: "%s"
0       string          AMF             AMF Module
>4      string          >\0             Title: "%s"
0       string          MODINFO1        Open Cubic Player Module Information MDZ
0       string          Extended\40Instrument: Fast Tracker II Instrument

# From: Takeshi Hamasaki <[email protected]>
# NOA Nancy Codec file
0       string          \210NOA\015\012\032     NOA Nancy Codec Movie file
# Yamaha SMAF format
0       string          MMMD            Yamaha SMAF file
# Sharp Jisaku Melody format for PDC
0       string          \001Sharp\040JisakuMelody       SHARP Cell-Phone ringing Melody
>20     string          Ver01.00        Ver. 1.00
>>32    byte            x               , %d tracks

# Free lossless audio codec <http://flac.sourceforge.net>
# From: Przemyslaw Augustyniak <[email protected]>
0       string                  fLaC            FLAC audio bitstream data
!:mime  audio/flac
>4      byte&0x7f               >0              \b, unknown version
>4      byte&0x7f               0               \b
# some common bits/sample values
>>20    beshort&0x1f0           0x030           \b, 4 bit
>>20    beshort&0x1f0           0x050           \b, 6 bit
>>20    beshort&0x1f0           0x070           \b, 8 bit
>>20    beshort&0x1f0           0x0b0           \b, 12 bit
>>20    beshort&0x1f0           0x0f0           \b, 16 bit
>>20    beshort&0x1f0           0x170           \b, 24 bit
>>20    byte&0xe                0x0             \b, mono
>>20    byte&0xe                0x2             \b, stereo
>>20    byte&0xe                0x4             \b, 3 channels
>>20    byte&0xe                0x6             \b, 4 channels
>>20    byte&0xe                0x8             \b, 5 channels
>>20    byte&0xe                0xa             \b, 6 channels
>>20    byte&0xe                0xc             \b, 7 channels
>>20    byte&0xe                0xe             \b, 8 channels
# sample rates derived from known oscillator frequencies;
# 24.576 MHz (video/fs=48kHz), 22.5792 (audio/fs=44.1kHz) and
# 16.384 (other/fs=32kHz).
>>17    belong&0xfffff0         0x02b110        \b, 11.025 kHz
>>17    belong&0xfffff0         0x03e800        \b, 16 kHz
>>17    belong&0xfffff0         0x056220        \b, 22.05 kHz
>>17    belong&0xfffff0         0x05dc00        \b, 24 kHz
>>17    belong&0xfffff0         0x07d000        \b, 32 kHz
>>17    belong&0xfffff0         0x0ac440        \b, 44.1 kHz
>>17    belong&0xfffff0         0x0bb800        \b, 48 kHz
>>17    belong&0xfffff0         0x0fa000        \b, 64 kHz
>>17    belong&0xfffff0         0x158880        \b, 88.2 kHz
>>17    belong&0xfffff0         0x177000        \b, 96 kHz
>>17    belong&0xfffff0         0x1f4000        \b, 128 kHz
>>17    belong&0xfffff0         0x2b1100        \b, 176.4 kHz
>>17    belong&0xfffff0         0x2ee000        \b, 192 kHz
>>17    belong&0xfffff0         0x3e8000        \b, 256 kHz
>>17    belong&0xfffff0         0x562200        \b, 352.8 kHz
>>17    belong&0xfffff0         0x5dc000        \b, 384 kHz
>>21    byte&0xf                >0              \b, >4G samples
>>21    byte&0xf                0               \b
>>>22   belong                  >0              \b, %u samples
>>>22   belong                  0               \b, length unknown

# (ISDN) VBOX voice message file (Wolfram Kleff)
0       string          VBOX            VBOX voice message data

# ReBorn Song Files (.rbs)
# David J. Singer <[email protected]>
8       string          RB40             RBS Song file
>29     string          ReBorn           created by ReBorn
>37     string          Propellerhead    created by ReBirth

# Synthesizer Generator and Kimwitu share their file format
0       string          A#S#C#S#S#L#V#3     Synthesizer Generator or Kimwitu data
# Kimwitu++ uses a slightly different magic
0       string          A#S#C#S#S#L#HUB     Kimwitu++ data

# From "Simon Hosie
0       string  TFMX-SONG       TFMX module sound data

# Monkey's Audio compressed audio format (.ape)
# From [email protected] (Danny Milosavljevic)
# New version from Abel Cheung <abel (@) oaka.org>
0               string          MAC\040         Monkey's Audio compressed format
!:mime audio/x-ape
>4              uleshort        >0x0F8B         version %d
>>(0x08.l)      uleshort        =1000           with fast compression
>>(0x08.l)      uleshort        =2000           with normal compression
>>(0x08.l)      uleshort        =3000           with high compression
>>(0x08.l)      uleshort        =4000           with extra high compression
>>(0x08.l)      uleshort        =5000           with insane compression
>>(0x08.l+18)   uleshort        =1              \b, mono
>>(0x08.l+18)   uleshort        =2              \b, stereo
>>(0x08.l+20)   ulelong         x               \b, sample rate %d
>4              uleshort        <0x0F8C         version %d
>>6             uleshort        =1000           with fast compression
>>6             uleshort        =2000           with normal compression
>>6             uleshort        =3000           with high compression
>>6             uleshort        =4000           with extra high compression
>>6             uleshort        =5000           with insane compression
>>10            uleshort        =1              \b, mono
>>10            uleshort        =2              \b, stereo
>>12            ulelong         x               \b, sample rate %d

# adlib sound files
# From: Alex Myczko <[email protected]>

# https://github.com/rerrahkr/BambooTracker
0       string  BambooTracker   BambooTracker
>13     string  Mod             Module
>13     string  Ist             Instrument
>13     string  Bnk             Bank
>22     byte    x               \b, version %u
>21     byte    x               \b.%u
>20     byte    x               \b.%u

0       string          CC2x            CheeseCutter 2 song

0       string          RAWADATA        RdosPlay RAW

1068    string          RoR             AMUSIC Adlib Tracker

0       string          JCH             EdLib

0       string          mpu401tr        MPU-401 Trakker

0       string          SAdT            Surprise! Adlib Tracker
>4      byte            x               Version %d

0       string          XAD!            eXotic ADlib

0       string          ofTAZ!          eXtra Simple Music

0       string          FMK!            FM Kingtracker Song

0       string          DFM             DFM Song

0       string          \<CUD-FM-File\> CFF Song

0       string          _A2module       A2M Song

# Spectrum 128 tunes (.ay files).
# From: Emanuel Haupt <[email protected]>
0       string          ZXAYEMUL        Spectrum 128 tune

0       string          \0BONK          BONK,
#>5     byte            x               version %d
>14     byte            x               %d channel(s),
>15     byte            =1              lossless,
>15     byte            =0              lossy,
>16     byte            x               mid-side

384     string          LockStream      LockStream Embedded file (mostly MP3 on old Nokia phones)

# format VQF (proprietary codec for sound)
# some infos on the header file available at :
# http://www.twinvq.org/english/technology_format.html
0       string          TWIN97012000    VQF data
>27     short           0               \b, Mono
>27     short           1               \b, Stereo
>31     short           >0              \b, %d kbit/s
>35     short           >0              \b, %d kHz

# Nelson A. de Oliveira ([email protected])
# .eqf
0       string  Winamp\ EQ\ library\ file       %s
# it will match only versions like v<digit>.<digit>
# Since I saw only eqf files with version v1.1 I think that it's OK
>23     string  x       \b%.4s
# .preset
0       string  [Equalizer\ preset]     XMMS equalizer preset
# .m3u
0       search/1        #EXTM3U         M3U playlist text
# .pls
0       search/1        [playlist]      PLS playlist text
# licq.conf
1       string  [licq]                  LICQ configuration file

# Atari ST audio files by Dirk Jagdmann <[email protected]>
# NOTE: Most SNDH music is packed using ICE, which has
# magic numbers "ICE!" and "Ice!". Some SNDH music is
# not packed, so we check for both packed and unpacked.
12      string                  SNDH    SNDH Atari ST music
0       belong&0xFFDFDFFF       0x49434521
>14     search/40               NDH     SNDH Atari ST music
>14     search/40               TITL    SNDH Atari ST music
0       string          SC68\ Music-file\ /\ (c)\ (BeN)jami     sc68 Atari ST music

# musepak support From: "Jiri Pejchal" <[email protected]>
0       string          MP+     Musepack audio (MP+)
!:mime  audio/x-musepack
>3      byte            255     \b, SV pre8
>3      byte&0xF        0x6     \b, SV 6
>3      byte&0xF        0x8     \b, SV 8
>3      byte&0xF        0x7     \b, SV 7
>>3     byte&0xF0       0x0     \b.0
>>3     byte&0xF0       0x10    \b.1
>>3     byte&0xF0       240     \b.15
>>10    byte&0xF0       0x0     \b, no profile
>>10    byte&0xF0       0x10    \b, profile 'Unstable/Experimental'
>>10    byte&0xF0       0x50    \b, quality 0
>>10    byte&0xF0       0x60    \b, quality 1
>>10    byte&0xF0       0x70    \b, quality 2 (Telephone)
>>10    byte&0xF0       0x80    \b, quality 3 (Thumb)
>>10    byte&0xF0       0x90    \b, quality 4 (Radio)
>>10    byte&0xF0       0xA0    \b, quality 5 (Standard)
>>10    byte&0xF0       0xB0    \b, quality 6 (Xtreme)
>>10    byte&0xF0       0xC0    \b, quality 7 (Insane)
>>10    byte&0xF0       0xD0    \b, quality 8 (BrainDead)
>>10    byte&0xF0       0xE0    \b, quality 9
>>10    byte&0xF0       0xF0    \b, quality 10
>>27    byte            0x0     \b, Buschmann 1.7.0-9, Klemm 0.90-1.05
>>27    byte            102     \b, Beta 1.02
>>27    byte            104     \b, Beta 1.04
>>27    byte            105     \b, Alpha 1.05
>>27    byte            106     \b, Beta 1.06
>>27    byte            110     \b, Release 1.1
>>27    byte            111     \b, Alpha 1.11
>>27    byte            112     \b, Beta 1.12
>>27    byte            113     \b, Alpha 1.13
>>27    byte            114     \b, Beta 1.14
>>27    byte            115     \b, Alpha 1.15

0       string          MPCK    Musepack audio (MPCK)
!:mime  audio/x-musepack

# IMY
# from http://filext.com/detaillist.php?extdetail=IMY
# https://cellphones.about.com/od/cellularfaqs/f/rf_imelody.htm
# http://download.ncl.ie/doc/api/ie/ncl/media/music/IMelody.html
# http://www.wx800.com/msg/download/irda/iMelody.pdf
0       string  BEGIN:IMELODY   iMelody Ringtone Format

# From: "Mateus Caruccio" <[email protected]>
# guitar pro v3,4,5 from http://filext.com/file-extension/gp3
0       string  \030FICHIER\ GUITAR\ PRO\ v3.   Guitar Pro Ver. 3 Tablature

# From: "Leslie P. Polzer" <[email protected]>
60      string  SONG            SoundFX Module sound file

# Type: Adaptive Multi-Rate Codec
# URL:  http://filext.com/detaillist.php?extdetail=AMR
# From: Russell Coker <[email protected]>
0       string  #!AMR           Adaptive Multi-Rate Codec (GSM telephony)
!:mime  audio/amr
!:ext  amr

# Type: SuperCollider 3 Synth Definition File Format
# From: Mario Lang <[email protected]>
0       string  SCgf    SuperCollider3 Synth Definition file,
>4      belong  x       version %d

# Type: True Audio Lossless Audio
# URL:  https://wiki.multimedia.cx/index.php?title=True_Audio
# From: Mike Melanson <[email protected]>
0       string  TTA1    True Audio Lossless Audio

# Type: WavPack Lossless Audio
# URL:  https://wiki.multimedia.cx/index.php?title=WavPack
# From: Mike Melanson <[email protected]>
0       string  wvpk    WavPack Lossless Audio

# From Fabio R. Schmidlin <[email protected]>
# VGM music file
0       string          Vgm\040
>9      ubyte           >0      VGM Video Game Music dump v
!:mime  audio/x-vgm
!:ext   vgm
>>9     ubyte/16        >0      \b%d
>>9     ubyte&0x0F      x       \b%d
>>8     ubyte/16        x       \b.%d
>>8     ubyte&0x0F      >0      \b%d
#Get soundchips
>>8     ubyte           x       \b, soundchip(s)=
>>0x0C  ulelong         >0      SN76489 (PSG),
>>0x10  ulelong         >0      YM2413 (OPLL),
>>0x2C  ulelong         >0      YM2612 (OPN2),
>>0x30  ulelong         >0      YM2151 (OPM),
>>0x38  ulelong         >0      Sega PCM,
>>0x34  ulelong         >0xC
>>>0x40 ulelong         >0      RF5C68 (PCM),
>>0x34  ulelong         >0x10
>>>0x44 ulelong         >0      YM2203 (OPN),
>>0x34  ulelong         >0x14
>>>0x48 ulelong         >0      YM2608 (OPNA),
>>0x34  ulelong         >0x18
>>>0x4C lelong          >0      YM2610 (OPNB),
>>>0x4C lelong          <0      YM2610B (OPNB+2FM),
>>0x34  ulelong         >0x1C
>>>0x50 ulelong         >0      YM3812 (OPL2),
>>0x34  ulelong         >0x20
>>>0x54 ulelong         >0      YM3526 (OPL),
>>0x34  ulelong         >0x24
>>>0x58 ulelong         >0      Y8950 (MSX-Audio),
>>0x34  ulelong         >0x28
>>>0x5C ulelong         >0      YMF262 (OPL3),
>>0x34  ulelong         >0x2C
>>>0x60 ulelong         >0      YMF278B (OPL4),
>>0x34  ulelong         >0x30
>>>0x64 ulelong         >0      YMF271 (OPX),
>>0x34  ulelong         >0x34
>>>0x68 ulelong         >0      YMZ280B (PCMD8),
>>0x34  ulelong         >0x38
>>>0x6C ulelong         >0      RF5C164 (PCM),
>>0x34  ulelong         >0x3C
>>>0x70 ulelong         >0      PWM,
>>0x34  ulelong         >0x40
>>>0x74 ulelong         >0
>>>>0x78 ubyte          0x00    AY-3-8910,
>>>>0x78 ubyte          0x01    AY-3-8912,
>>>>0x78 ubyte          0x02    AY-3-8913,
>>>>0x78 ubyte          0x03    AY-3-8930,
>>>>0x78 ubyte          0x10    YM2149,
>>>>0x78 ubyte          0x11    YM3439,
>>>>0x78 ubyte          0x12    YMZ284,
>>>>0x78 ubyte          0x13    YMZ294,
# VGM 1.61
>>0x34  ulelong         >0x4C
>>>0x80 ulelong         >0      DMG,
>>0x34  ulelong         >0x50
>>>0x84 lelong          >0      NES APU,
>>>0x84 lelong          <0      NES APU with FDS,
>>0x34  ulelong         >0x54
>>>0x88 ulelong         >0      MultiPCM,
>>0x34  ulelong         >0x58
>>>0x8C ulelong         >0      uPD7759 (ADPCM Speech),
>>0x34  ulelong         >0x5C
>>>0x90 ulelong         >0      OKIM6258 (ADPCM Speech),
>>0x34  ulelong         >0x64
>>>0x98 ulelong         >0      OKIM6295 (ADPCM),
>>0x34  ulelong         >0x68
>>>0x9C ulelong         >0      K051649,
>>0x34  ulelong         >0x6C
>>>0xA0 ulelong         >0      K054539,
>>0x34  ulelong         >0x70
>>>0xA4 ulelong         >0      HuC6280,
>>0x34  ulelong         >0x74
>>>0xA8 ulelong         >0      C140,
>>0x34  ulelong         >0x78
>>>0xAC ulelong         >0      K053260,
>>0x34  ulelong         >0x7C
>>>0xB0 ulelong         >0      Pokey,
>>0x34  ulelong         >0x80
>>>0xB4 ulelong         >0      QSound,
# VGM 1.71
>>0x34  ulelong         >0x84
>>>0xB8 ulelong         >0      SCSP,
>>0x34  ulelong         >0x8C
>>>0xC0 ulelong         >0      WonderSwan,
>>0x34  ulelong         >0x90
>>>0xC4 ulelong         >0      VSU,
>>0x34  ulelong         >0x94
>>>0xC8 ulelong         >0      SAA1099,
>>0x34  ulelong         >0x98
>>>0xCC ulelong         >0      ES5503 (DOC),
>>0x34  ulelong         >0x9C
>>>0xD0 lelong          >0      ES5505 (OTIS),
>>>0xD0 lelong          <0      ES5506 (OTTO),
>>0x34  ulelong         >0xA4
>>>0xD8 ulelong         >0      X1-010,
>>0x34  ulelong         >0xA8
>>>0xDC ulelong         >0      C352,
>>0x34  ulelong         >0xAC
>>>0xE0 ulelong         >0      GA20,

# GVOX Encore file format
# Since this is a proprietary file format and there is no publicly available
# format specification, this is just based on induction
#
0       string  SCOW
>4      byte    0xc4    GVOX Encore music, version 5.0 or above
>4      byte    0xc2    GVOX Encore music, version < 5.0

0       string  ZBOT
>4      byte    0xc5    GVOX Encore music, version < 5.0

# Summary:      Garmin Voice Processing Module (WAVE audios)
# From:         Joerg Jenderek
# URL:          https://www.garmin.com/
# Reference:    http://www.poi-factory.com/node/19580
# NOTE:         there exist 2 other Garmin VPM formats
0               string  AUDIMG
# skip text files starting with string "AUDIMG"
>13             ubyte           <13     Garmin Voice Processing Module
!:mime  audio/x-vpm-wav-garmin
!:ext   vpm
# 3 bytes indicating the voice version (200,220)
>>6             string          x       \b, version %3.3s
# day of release (01-31)
>>12            ubyte           x       \b, %.2d
# month of release (01-12)
>>13            ubyte           x       \b.%.2d
# year of release (like 2006, 2007, 2008)
>>14            uleshort        x       \b.%.4d
# hour of release (0-23)
>>11            ubyte           x       %.2d
# minute of release (0-59)
>>10            ubyte           x       \b:%.2d
# second of release (0-59)
>>9             ubyte           x       \b:%.2d
# if you select a language like german on your garmin device
# you can only select voice modules with corresponding language byte ID like 1
>>18            ubyte           x       \b, language ID %d
# structure for phrases/sentences?
# number of voice sample in the 1st phrase?
#>>19           uleshort                x       \b, %#x samples
#>>>21          uleshort                >0      \b, at %#4.4x
#>>>(21.s)      ubequad                 x       %#llx
# 2nd phrase?
#>>23           uleshort                x       \b, %#x samples
#>>>25          uleshort                >0      \b, at %#4.4x
#>>>(25.s)      ubequad                 x       %#llx
# pointer to 1st audio WAV sample
>>16            uleshort        >0
>>>(16.s)       ulelong         >0      \b, at %#x
# WAV length
# 1 space char after "bytes" to get phrase "bytes RIFF"
>>>>(16.s+4)    ulelong         >0      %u bytes
# look for magic
>>>>>(&-8.l)    string          RIFF
# determine type by ./riff
>>>>>>&-4       indirect        x
# 2 - ~ 131 WAV samples following same way
#
# Summary:      encrypted Garmin Voice Processing Module
# From:         Joerg Jenderek
# URL:          https://www.garmin.com/us/products/ontheroad/voicestudio
# NOTE:         Encrypted variant used in voices like DrNightmare, Elfred, Yeti.
#               There exist 2 other Garmin VPM formats
0       ubequad         0xa141190fecc8ced6      Garmin Voice Processing Module (encrypted)
!:mime  audio/x-vpm-garmin
!:ext   vpm

# From Martin Mueller Skarbiniks Pedersen
0               string          GDM
>0x3            byte            0xFE    General Digital Music.
>0x4            string          >\0     title: "%s"
>0x24           string          >\0     musician: "%s"
>>0x44          beshort         0x0D0A
>>>0x46         byte            0x1A
>>>>0x47        string          GMFS    Version
>>>>0x4B        byte            x       %d.
>>>>0x4C        byte            x       \b%02d
>>>>0x4D        beshort         0x000   (2GDM v
>>>>0x4F        byte            x       \b%d.
>>>>>0x50       byte            x       \b%d)

0               string          MTM     Multitracker
>0x3            byte/16         x       Version %d.
>0x3            byte&0x0F       x       \b%02d
>>0x4           string          >\0     title: "%s"

0               string          MO3
>3              ubyte           <6      MOdule with MP3
>>3             byte            0       Version 0       (With MP3 and lossless)
>>3             byte            1       Version 1       (With ogg and lossless)
>>3             byte            3       Version 2.2
>>3             byte            4       (With no LAME header)
>>3             byte            5       Version 2.4

0               string          ADRVPACK        AProSys module

# ftp://ftp.modland.com/pub/documents/format_documentation/\
# Art%20Of%20Noise%20(.aon).txt
0               string          AON
>4              string          "ArtOfNoise by Bastian Spiegel(twice/lego)"
>0x2e           string          NAME    Art of Noise Tracker Song
>3              string          <9
>3              string          4       (4 voices)
>3              string          8       (8 voices)
>>0x36          string          >\0     Title: "%s"

0               string          FAR
>0x2c           byte            0x0d
>0x2d           byte            0x0a
>0x2e           byte            0x1a
>>0x3           byte            0xFE    Farandole Tracker Song
>>>0x31         byte/16         x       Version %d.
>>>0x31         byte&0x0F       x       \b%02d
>>>>0x4         string          >\0     \b, title: "%s"

# magic for Klystrack, https://kometbomb.github.io/klystrack/
# from Alex Myczko <[email protected]>
0       string  cyd!song        Klystrack song
>8      byte    >0              \b, version %u
>8      byte    >26
#>>9    byte    x               \b, channels %u
#>>10   leshort x               \b, time signature %u
#>>12   leshort x               \b, sequence step %u
#>>14   byte    x               \b, instruments %u
#>>15   leshort x               \b, patterns %u
#>>17   leshort x               \b, sequences %u
#>>19   leshort x               \b, length %u
#>>21   leshort x               \b, loop point %u
#>>23   byte    x               \b, master volume %u
#>>24   byte    x               \b, song speed %u
#>>25   byte    x               \b, song speed2 %u
#>>26   byte    x               \b, song rate %u
#>>27   belong  x               \b, flags %#x
#>>31   byte    x               \b, multiplex period %u
#>>32   byte    x               \b, pitch inaccuracy %u
>>149   pstring x               \b, title %s

0       string  cyd!inst        Klystrack instrument

# magic for WOPL instrument files, https://github.com/Wohlstand/OPL3BankEditor
# see Specifications/WOPL-and-OPLI-Specification.txt

0       string  WOPL3-INST\0    WOPL instrument
>11     leshort x       \b, version %u
0       string  WOPL3-BANK\0    WOPL instrument bank
>11     leshort x       \b, version %u

# AdLib/OPL instrument files. Format specifications on
#  http://www.shikadi.net/moddingwiki
0       string  Junglevision\ Patch\ File       Junglevision instrument data
0       string  #OPL_II#        DMX OP2 instrument data
0       string  IBK\x1a         IBK instrument data
0       string  2OP\x1a         IBK instrument data, 2 operators
0       string  4OP\x1a         IBK instrument data, 4 operators
2       string  ADLIB-          AdLib instrument data
>0      byte    x               \b, version %u
>1      byte    x               \b.%u

# CRI ADX ADPCM audio
# Used by various Sega games.
# https://en.wikipedia.org/wiki/ADX_(file_format)
# https://wiki.multimedia.cx/index.php/CRI_ADX_file
# Added by David Korth <[email protected]>
0x00            beshort         0x8000
>(2.S-2)        string          (c)CRI          CRI ADX ADPCM audio
!:ext adx
!:mime audio/x-adx
!:strength +50
>>0x12          byte            x               v%u
>>0x04          byte            0x02            \b, pre-set prediction coefficients
>>0x04          byte            0x03            \b, standard ADX
>>0x04          byte            0x04            \b, exponential scale
>>0x04          byte            0x10            \b, AHX (Dreamcast)
>>0x04          byte            0x11            \b, AHX
>>0x08          belong          x               \b, %u Hz
>>0x12          byte            0x03
>>>0x02         beshort         >0x2B
>>>>0x18        belong          !0              \b, looping
>>0x12          byte            0x04
>>>0x02         beshort         >0x37
>>>>0x24        belong          !0              \b, looping
>>0x13          byte&0x08       0x08            \b, encrypted

# Lossless audio (.la) (http://www.lossless-audio.com/)
0       string  LA
>2      string  03      Lossless audio version 0.3
>2      string  04      Lossless audio version 0.4

# Sony PlayStation Audio (.xa)
0       leshort 0x4158  Sony PlayStation Audio

# Portable Sound Format
# Used for audio rips for various consoles.
# http://fileformats.archiveteam.org/wiki/Portable_Sound_Format
# Added by David Korth <[email protected]>
0       string  PSF
>3      byte    0x01
>3      byte    0x02
>3      byte    0x11
>3      byte    0x12
>3      byte    0x13
>3      byte    0x21
>3      byte    0x22
>3      byte    0x23
>3      byte    0x41
>>0     string  PSF     Portable Sound Format
!:mime  audio/x-psf
>>>3    byte    0x01    (Sony PlayStation)
>>>3    byte    0x02    (Sony PlayStation 2)
>>>3    byte    0x11    (Sega Saturn)
>>>3    byte    0x12    (Sega Dreamcast)
>>>3    byte    0x13    (Sega Mega Drive)
>>>3    byte    0x21    (Nintendo 64)
>>>3    byte    0x22    (Game Boy Advance)
>>>3    byte    0x23    (Super NES)
>>>3    byte    0x41    (Capcom QSound)

# Atari 8-bit SAP audio format
# http://asap.sourceforge.net/sap-format.html
# Added by David Korth <[email protected]>
0       string          SAP\r\n Atari 8-bit SAP audio file
!:mime  audio/x-sap
!:ext   sap
>5      search/1024     NAME
>>&1    string          x       \b: %s
>>5     search/1024     AUTHOR
>>>&1   string          x       by %s

# Nintendo Wii BRSTM audio format (fields)
# NOTE: Assuming HEAD starts at 0x40.
# FIXME: Replace 0x48 with HEAD offset plus 8.
0       name    nintendo-wii-brstm-fields
>(0x10.L)       string  HEAD    \b:
>>(0x10.L+0x0C) belong  x
>>>(&-4.L+0x48) belong  x
>>>>&-4         byte    0       PCM, signed 8-bit,
>>>>&-4         byte    1       PCM, signed 16-bit,
>>>>&-4         byte    2       THP ADPCM,
>>>>&-3         byte    !0      looping,
>>>>&-2         byte    1       mono
>>>>&-2         byte    2       stereo
>>>>&-2         byte    3       3 channels
>>>>&-2         byte    4       quad
>>>>&-2         byte    >4      %u channels
>>>>&0          beshort !0      %u Hz

# Nintendo Wii BRSTM audio format
# https://wiibrew.org/wiki/BRSTM_file
# Added by David Korth <[email protected]>
0       string          RSTM    Nintendo Wii BRSTM audio file
!:mime  audio/x-brstm
!:ext   brstm
# Wii is big-endian, so default to BE.
>4      beshort         0xFEFF
>>0     use             nintendo-wii-brstm-fields
>4      leshort         0xFEFF
>>0     use             \^nintendo-wii-brstm-fields

# Nintendo 3DS BCSTM audio format (fields)
0       name    nintendo-3ds-bcstm-fields
>(0x18.l)       string  INFO    \b:
# INFO block: Stream information starts at 0x20 (minus 4 for the 'INFO' magic)
>>&0x1C         byte    0       PCM, signed 8-bit,
>>&0x1C         byte    1       PCM, signed 16-bit,
>>&0x1C         byte    2       DSP ADPCM,
>>&0x1C         byte    3       IMA ADPCM,
>>&0x1D         byte    !0      looping,
>>&0x1E         byte    1       mono
>>&0x1E         byte    2       stereo
>>&0x1E         byte    3       3 channels
>>&0x1E         byte    4       quad
>>&0x1E         byte    >4      %u channels
>>&0x20         lelong  !0      %u Hz

# Nintendo 3DS BCSTM audio format
# https://www.3dbrew.org/wiki/BCSTM
# Added by David Korth <[email protected]>
0       string          CSTM    Nintendo 3DS BCSTM audio file
!:mime  audio/x-bcstm
!:ext   bcstm
# 3DS is little-endian, so default to LE.
>4      leshort         0xFEFF
>>0     use             nintendo-3ds-bcstm-fields
>4      beshort         0xFEFF
>>0     use             \^nintendo-3ds-bcstm-fields

# Nintendo Wii U BFSTM audio format
# http://mk8.tockdom.com/wiki/BFSTM_(File_Format)
# NOTE: This format is very similar to BCSTM.
# Added by David Korth <[email protected]>
0       string          FSTM    Nintendo Wii U BFSTM audio file
!:mime  audio/x-bfstm
!:ext   bfstm
# BFSTM is used on both Wii U (BE) and Switch (LE),
# so default to LE.
>4      leshort         0xFEFF
>>0     use             nintendo-3ds-bcstm-fields
>4      beshort         0xFEFF
>>0     use             \^nintendo-3ds-bcstm-fields

# Nintendo 3DS BCSTM audio format (fields)
0       name    nintendo-3ds-bcwav-fields
>(0x18.l)       string  INFO    \b:
# INFO block (minus 4 for INFO magic)
>>&0x4          byte    0       PCM, signed 8-bit,
>>&0x4          byte    1       PCM, signed 16-bit,
>>&0x4          byte    2       DSP ADPCM,
>>&0x4          byte    3       IMA ADPCM,
>>&0x5          byte    !0      looping,
>>&0x8          lelong  x       stereo
>>&0x8          lelong  !0      %u Hz

# Nintendo 3DS BCWAV audio format
# https://www.3dbrew.org/wiki/BCWAV
# Added by David Korth <[email protected]>
0       string          CWAV    Nintendo 3DS BCWAV audio file
!:mime  audio/x-bcwav
!:ext   bcwav
# 3DS is little-endian, so default to LE.
>4      leshort         0xFEFF
>>0     use             nintendo-3ds-bcwav-fields
>4      beshort         0xFEFF
>>0     use             \^nintendo-3ds-bcwav-fields

# Philips DSDIFF audio format (Direct Stream Digital Interchange File Format)
# Used for DSD audio recordings and Super Audio CD (SACD) mastering annotations
# https://dsd-guide.com/sites/default/files/white-papers/DSDIFF_1.5_Spec.pdf
# From: Toni Ruottu <[email protected]>
0               string          FRM8
12              string          DSD\x20         DSDIFF audio bitstream data
!:mime          audio/x-dff
!:ext           dff

# format version chunk
>&0             string          FVER
# version 1
>>&8            byte            1

# v1 / sampling resolution ( 1 bit PDM only )
>>>&0           string          x               \b, 1 bit

# v1 / sound property chunk
>>>&0           search/0xff     PROP
>>>>&8          string          SND

# v1 / sound property chunk / channel configuration chunk
>>>>>&0         search/0xff     CHNL
>>>>>>&8        ubeshort        1                                                       \b, mono
>>>>>>&8        ubeshort        2
>>>>>>>&0       string          SLFTSRGT                                                \b, stereo
>>>>>>>&0       default         x                                                       \b, 2 channels
>>>>>>&8        ubeshort        3
>>>>>>>&0       string          SLFTSRGTLFE\x20                                         \b, 2.1 stereo
>>>>>>>&0       string          SLFTSRGTC\x20\x20\x20                                   \b, 3.0 stereo
>>>>>>>&0       default         x                                                       \b, 3 channels
>>>>>>&8        ubeshort        4
>>>>>>>&0       string          MLFTMRGTLS\x20\x20RS\x20\x20                            \b, 4.0 surround
>>>>>>>&0       string          SLFTSRGTC\x20\x20\x20LFE\x20                            \b, 3.1 stereo
>>>>>>>&0       default         x                                                       \b, 4 channels
>>>>>>&8        ubeshort        5
>>>>>>>&0       string          MLFTMRGTC\x20\x20\x20LS\x20\x20RS\x20\x20               \b, 5.0 surround
>>>>>>>&0       string          MLFTMRGTLFE\x20LS\x20\x20RS\x20\x20                     \b, 4.1 surround
>>>>>>>&0       default         x                                                       \b, 5 channels
>>>>>>&8        ubeshort        6
>>>>>>>&0       string          MLFTMRGTC\x20\x20\x20LFE\x20LS\x20\x20RS\x20\x20        \b, 5.1 surround
>>>>>>>&0       default         x                                                       \b, 6 channels
>>>>>>&8        ubeshort        >6                                                      \b, %u channels

# v1 / sound property chunk / sample rate chunk
>>>>>&0         search/0xff     FS\x20\x20
>>>>>>&0        string          x               \b,
>>>>>>&8        ubelong%44100   0
>>>>>>>&-4      ubelong/44100   x               "DSD %u"
>>>>>>>&-4      ubelong         x               %u Hz

# v1 / sound property chunk / compression type chunk
>>>>>&0         search/0xff     CMPR
>>>>>>&8        string          DSD\x20         \b, no compression
>>>>>>&8        string          DST\x20         \b, DST compression
>>>>>>&8        default         x               \b, unknown compression

# v1 / quest for metadata
>>>&0           string          x

# v1 / quest for metadata / edited master information chunk
>>>>&0          search          DIIN
>>>>>&0         ubequad         >0              \b, "edited master" metadata

# v1 / quest for metadata / ID3 chunk ( defacto standard )
>>>>&0          search          ID3\x20
>>>>>&8         string          ID3             \b, ID3 version 2
>>>>>&0         byte            x               \b.%u
>>>>>&1         byte            x               \b.%u

# v1 / quest for metadata / failure ( possibly due to -P bytes=... being too low )
>>>>&0          default         x               \b, ID3 missing (or unreachable)

# version > 1 or 0
>>&0            default         x               \b, unknown version

# Sony DSF audio format (Direct Stream Digital Stream File)
# Used for lossless digital storage of songs produced as DSD audio
# Portable analog of a track stored on a Super Audio CD (SACD)
# https://dsd-guide.com/sites/default/files/white-papers/DSFFileFormatSpec_E.pdf
# From: Toni Ruottu <[email protected]>
0               string          DSD\x20         DSF audio bitstream data
!:mime          audio/x-dsf
!:ext           dsf

# format chunk
>28             string          fmt\x20
# version 1
>>&8            ulelong         1

# v1 / sampling resolution ( 1 bit PDM only )
# NOTE: the spec incorrectly uses "bits per sample" instead of "bits per byte"
>>>&0           string          x               \b, 1 bit

# v1 / channel configuration
>>>>&4          ulelong         1               \b, mono
>>>>&4          ulelong         2               \b, stereo
>>>>&4          ulelong         3               \b, 3.0 stereo
>>>>&4          ulelong         4               \b, 4.0 surround
>>>>&4          ulelong         5               \b, 3.1 stereo
>>>>&4          ulelong         6               \b, 5.0 surround
>>>>&4          ulelong         7               \b, 5.1 surround
>>>>&0          default         x
>>>>>&4         ulelong         x               \b, %u channels

# v1 / sample rate chunk
>>>>&0          string          x               \b,
>>>>&12         ulelong%44100   0
>>>>>&-4        ulelong/44100   x               "DSD %u"
>>>>&12         ulelong         x               %u Hz

# v1 / compression
>>>>&0          string          x
>>>>>&0         ulelong         0               \b, no compression
>>>>>&0         default         x               \b, unknown compression

# v1 / embedded ID3v2 metadata
>>>0            string          x               \b, ID3
>>>>20          ulequad         !0
>>>>>(20.q)     string          ID3             version 2
>>>>>>&0        byte            x               \b.%u
>>>>>>&1        byte            x               \b.%u
# unable to verify ID3 ( possibly due to -P bytes=... being too low )
>>>>>&0         default         x               unreachable
>>>>&0          default         x               missing

# version > 1 or 0
>>&0            default         x               \b, unknown version