
#------------------------------------------------------------------------------
# $File: audio,v 1.135 2025/05/28 16:50:29 christos Exp $
# audio:  file(1) magic for sound formats (see also "iff")
#
# Jan Nicolai Langfeldt (janl@ifi.uio.no), Dan Quinlan (quinlan@yggdrasil.com),
# 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, newt@uchicago.edu); NOT TESTED
# [based on posting 940824 by "Dirk/Elastik", husberg@lehtori.cc.tut.fi]
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, aeppert@dialin.ind.net]
# Oct 31, 1995
# fixed by <doj@cubic.org> 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 <ache@nagual.ru>

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 (stevem@chiark.greenend.org.uk)
# <doj@cubic.org> 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 <trevor@jpj.net>
#
0       string          TOC             TOC sound file

# sidfiles <pooka@iki.fi>
# added name,author,(c) and new RSID type by <doj@cubic.org> 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 <michael@68k.org>
# 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		0x0002a364		IRCAM file (Sun little-endian)
0	belong		0x64a30200		IRCAM file (Sun big-endian)
0	belong		0x64a30300		IRCAM file (MIPS little-endian)
0	belong		0x0003a364		IRCAM file (MIPS big-endian)
0	belong		0x0004a364		IRCAM file (NeXT little-endian)
0	belong		0x64a30400		IRCAM file (NeXT big-endian)

# NIST SPHERE <mpruett@sgi.com>
0	string		NIST_1A\n\ \ \ 1024\n	NIST SPHERE file

# Sample Vision <mpruett@sgi.com>
0	string		SOUND\ SAMPLE\ DATA\ 	Sample Vision file

# Audio Visual Research <tonigonenstein@users.sourceforge.net>
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 <mpruett@sgi.com>
0	string		_SGI_SoundTrack		SGI SoundTrack project file
# ID3 version 2 tags <waschk@informatik.uni-rostock.de>
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 <david@pflug.email>
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 <josh@freedesktop.org>
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 <collver1@attbi.com>
# 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 <collver1@attbi.com>
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 <collver1@attbi.com>
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 <cdikkers@swbell.net>
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: <doj@cubic.org> 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 <hma@syd.odn.ne.jp>
# 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		\b, %d tracks

# Free lossless audio codec <http://flac.sourceforge.net>
# From: Przemyslaw Augustyniak <silvathraec@rpg.pl>
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 <doc@deadvirgins.org.uk>
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 danny.milo@gmx.net (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 <alex@aiei.ch>

# 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 <ehaupt@critical.ch>
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 (naoliv@gmail.com)
# .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
!:mime  audio/x-mpegurl
# .pls
0	search/1	[playlist]	PLS playlist text
# licq.conf
1	string	[licq]			LICQ configuration file

# Atari ST audio files by Dirk Jagdmann <doj@cubic.org>
# 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" <jiri.pejchal@gmail.com>
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" <mateus@caruccio.com>
# 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" <leslie.polzer@gmx.net>
60	string	SONG		SoundFX Module sound file

# Type: Adaptive Multi-Rate Codec
# URL:  http://filext.com/detaillist.php?extdetail=AMR
#		http://fileformats.archiveteam.org/wiki/Adaptive_Multi-Rate_Audio
# Reference:	https://datatracker.ietf.org/doc/html/rfc4867
#		http://mark0.net/download/triddefs_xml.7z/defs/a/audio-amr.trid.xml
# Update:	Joerg Jenderek
# From: Russell Coker <russell@coker.com.au>
# Note:		called "AMR (Adaptive Multi Rate) encoded audio" by TrID and
#		"Adaptive Multi-Rate Audio" by DROID via PUID fmt/356 and
#		"AMR" "AMR audio" or "Adaptive Multi-Rate" by shared MIME-info database from freedesktop.org
0	string	#!AMR		Adaptive Multi-Rate Codec
# Adaptive Multi-Rate Codec (strength=80) before wrong "a AMR script executable (binary data)" (strength=20=60/3) by ./varied.script
#!:strength +0
# Reference:	http://mark0.net/download/triddefs_xml.7z/defs/a/audio-awb.trid.xml
# Note:		called "Adaptive Multi-Rate Wideband ACELP codec" by TrID and
#		"Adaptive Multi-Rate Wideband Audio" bY DROID via PUID fmt/954 and
#		"AMR-WB" "AMR-WB audio" or "Adaptive Multi-Rate Wideband" by shared MIME-info database from freedesktop.org
>5	string	-WB		(Wideband)
# https://www.iana.org/assignments/media-types/audio/AMR-WB
!:mime	audio/AMR-WB
#!:mime	audio/amr-wb-encrypted
!:apple	????amrw
!:ext	awb
# variant without Wideband
>5	default	x		(GSM telephony)
# https://www.iana.org/assignments/media-types/audio/AMR
!:mime	audio/AMR
# last character in type code is space
!:apple	????amr 
!:ext  amr
# GRR: maybe also 3ga suffix?		https://telparia.com/fileFormatSamples/audio/amr/example.3ga
#!:ext  amr/3ga

# Type: SuperCollider 3 Synth Definition File Format
# From: Mario Lang <mlang@debian.org>
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 <mike@multimedia.cx>
0	string	TTA1	True Audio Lossless Audio

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

# From Fabio R. Schmidlin <frs@pop.com.br>
# 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 <alex@aiei.ch>
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 <gerbilsoft@gerbilsoft.com>
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 <gerbilsoft@gerbilsoft.com>
0	string	PSF
>3	byte	0x01
>>0	use	portable_sound_format
>3	byte	0x02
>>0	use	portable_sound_format
>3	byte	0x11
>>0	use	portable_sound_format
>3	byte	0x12
>>0	use	portable_sound_format
>3	byte	0x13
>>0	use	portable_sound_format
>3	byte	0x21
>>0	use	portable_sound_format
>3	byte	0x22
>>0	use	portable_sound_format
>3	byte	0x23
>>0	use	portable_sound_format
>3	byte	0x41
>>0	use	portable_sound_format


0	name	portable_sound_format
>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 <gerbilsoft@gerbilsoft.com>
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 <gerbilsoft@gerbilsoft.com>
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 <gerbilsoft@gerbilsoft.com>
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 <gerbilsoft@gerbilsoft.com>
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 <gerbilsoft@gerbilsoft.com>
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 <toni.ruottu@iki.fi>
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 <toni.ruottu@iki.fi>
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

# https://moddingwiki.shikadi.net/wiki/ROL_Format
4	string	\\roll\\default	AdLib Visual Composer ROL file
>0	leshort	x		\b, version %d.
>2	leshort	x		\b%d
>44	leshort	x		\b, tickBeat %d
>46	leshort	x		\b, beatMeasure %d
>48	leshort	x		\b, scaleY %d
>50	leshort	x		\b, scaleX %d
>52	byte	0		\b, percussive
>52	byte	1		\b, melodic

# https://pbat.ch/proj/protrekkr/
0	string	PROTREKT	Protrekkr Module
