SMR.szs

From Luma's Workshop
Revision as of 10:14, 5 February 2025 by SY24 (talk | contribs) (BST section (incomplete))
Jump to navigation Jump to search
This page is in progress and may contain incomplete information or editor's notes.

SMR.szs is a compressed BAA file (Binary Audio Archive) which defines the game's sound system. It contains references to streamed and sequenced music files as well as data for sound effects and instruments. It can be found in various JAudio games, however the specifications below mainly apply to Super Mario Galaxy and Super Mario Galaxy 2.

The following files are directly linked to SMR.szs:


The following files are indirectly linked to SMR.szs:

Header

The header contains offsets to all files included in SMR.szs:

Offset Type Description
0x00 Magic (0x4) AA_< (0x41415F3C)
0x04 Magic (0x4) bst (0x62737420)
0x08 UInt32 (0x4) Offset to BST section start
0x0C UInt32 (0x4) Offset to BST section end
0x10 Magic (0x4) bstn (0x6273746E)
0x14 UInt32 (0x4) Offset to BSTN section start
0x18 UInt32 (0x4) Offset to BSTN section end
0x1C Magic (0x4) bsc (0x62736320)
0x20 UInt32 (0x4) Offset to SC section start
0x24 UInt32 (0x4) Offset to SC section end
0x28 + N * 0x10 Magic (0x4) ws (0x77732020)
0x28 + N * 0x10 + 0x4 UInt32 (0x4) WSYS file ID (N)
0x28 + N * 0x10 + 0x8 UInt32 (0x4) Offset to WSYS file
0x28 + N * 0x10 + 0xC UInt32 (0x4) Unknown (mostly 0x00000000, once seen as 0xFFFFFFFF)
0x38 + N * 0x10 + M * 0xC Magic (0x4) bnk (0x626E6B20)
0x38 + N * 0x10 + M * 0xC + 0x4 UInt32 (0x4) IBNK file ID (M)
0x38 + N * 0x10 + M * 0xC + 0x8 UInt32 (0x4) Offset to IBNK file
0x44 + N * 0x10 + M * 0xC Magic (0x4) >_AA (0x3E5F4141)

BST

The Binary Sound Table contains parameters for all music and sound effects

BST Header

size: 0x20

Offset Type Description
0x00 Magic (0x4) BST (0x42535420)
? ?
0x08 UInt8 (0x1) ? Unknown. 0x01 in SMG and SMG2
? ?
0x0C UInt32 (0x4) Offset to BST main table
0x10 Padding (0x10)

BST main table

size: (N + 1) * 0x4

Offset Type Description
0x00 UInt32 (0x4) Amount N of entries (3 in SMG and SMG2)
0x04 UInt32 (0x4) Offset to SE table
0x08 UInt32 (0x4) Offset to BGM table
0x0C UInt32 (0x4) Offset to STREAM table

SE table

size: (N + 1) * 0x4

Offset Type Description
0x00 UInt32 (0x4) Amount N of entries (0xE in SMG and SMG2)
0x04 UInt32 (0x4) Offset to SYSTEM table
0x08 UInt32 (0x4) Offset to PLAYER_VOICE table
0x0C UInt32 (0x4) Offset to PLAYER_MOTION table
0x10 UInt32 (0x4) Offset to BOSS_VOICE table
0x14 UInt32 (0x4) Offset to BOSS_MOTION table
0x18 UInt32 (0x4) Offset to OBJECT table
0x1C UInt32 (0x4) Offset to ATMOSPHERE table
0x20 UInt32 (0x4) Offset to DEMO table
0x24 UInt32 (0x4) Offset to ENEMY_VOICE table
0x28 UInt32 (0x4) Offset to ENEMY_MOTION table
0x2C UInt32 (0x4) Offset to SUPPORTER_VOICE table
0x30 UInt32 (0x4) Offset to SUPPORTER_MOTION table
0x34 UInt32 (0x4) Offset to REMIX_SEQ table
0x38 UInt32 (0x4) Offset to HOME_BUTTON_MENU table

Each of the referenced tables are defined identically, see SE parameter table.

BGM table

size: (N + 1) * 0x4

Offset Type Description
0x00 UInt32 (0x4) Amount N of entries (2 in SMG and SMG2)
0x04 UInt32 (0x4) Offset to MAIN_BGM table
0x08 UInt32 (0x4) Offset to MULTI_BGM table

Each of the referenced tables are defined identically, see BGM parameter table.

STREAM table

size: (N + 1) * 0x4

Offset Type Description
0x00 UInt32 (0x4) Amount N of entries (1 in SMG and SMG2)
0x04 UInt32 (0x4) Offset to STREAM parameter table

SE parameter table

BGM parameter table

STREAM parameter table

BSTN

SC

WSYS

IBNK

Editing SMR.szs

The following section contains instructions for editing SMR.szs with the SoundModdingToolkit. They do not contain specifications for the file itself.

The tool SoundModdingToolkit can convert this file into a clear and readable file structure, so the structure of the file is shown on this page using the tool's converted structure.

Please note that only version 4.1.0 can edit the lists without any problems. Later versions can lead to problems such as muted songs.

BGM

MAIN_BGM

Found in SoundTable/BGM/libraries/MAIN_BGM.json
Defines the sequenced music. The music sequence files can be found in bms format in AudioRes/Seqs/JaiSeq.arc.

Name Description
unk1
unk2 Volume (overridden by BgmParam in SMG2)
unk3 File ID of the bms file in JaiSeq.arc to use (the filename is ignored)
unk4 File ID of the cit file in JaiChord.arc to use (the filename is ignored)
unk5
type
mOffset
NameOffset
name Internal mapping name for this sequence (e.g. "BGM_MISS").
This name can then be used in musiclists like ScenarioBgmInfo.

MULTI_BGM

Found in SoundTable/BGM/libraries/MULTI_BGM.json
Defines settings about Multi BGM such as its name. Multi BGM combines Stream (STM) and sequential Music (BGM). Which Music is set for each Multi BGM is defined in MultiBgmInfo.

Name Description
unk1 ? always 112
unk2 ? always 120
unk3 ? always 0
unk4 ? always -1
unk5 ? always 0
type ? always 96
mOffset
NameOffset ? always 0
name Internal mapping name for this entry (e.g. "MBGM_STAR_CHANCE")
This name can then be used in musiclists like ScenarioBgmInfo.

STREAM

Found in SoundTable/STREAM/0.json
Defines the streamed ast audio files including its internal STM name as well as its filepath.

Name Description
unk1 ? always 128
unk2 Volume (overridden by BgmParam in SMG2)
streamType Stream Type
14: Standard Stream (2 Channels)
238: Multi Stream (4 Channels)
streamPath Filepath of the AST file to use (e.g. "/AudioRes/Stream/smg2_ev_starchance_strm.ast")
type ? always 112
mOffset
NameOffset ? always 0
name Internal mapping name for this song (e.g. "STM_STAR_CHANCE")
This name can then be used in musiclists like ScenarioBgmInfo.

SE

AW

Each aw. file is converted by the tool into a folder that has the ID of the aw file in its name, and besides the sound files converted in wav format, contains the following settings for each sound:

  • manifest.json Contains the ID and name of the aw file
  • wavetable.json Contains settings for each sound of the aw. file
wavetable

Each entry starts with the name of the Wav file (e.g. "31") followed by its settings:

Name Description
format ? always 0
key
sampleRate The sample rate at which the sound should be played. (e.g. "22050.0")
sampleCount Length of the sound in samples
loop Whether it should be looped or not
true: loop
false: do not loop
loop_start Loop Start position in samples.
loop_end Loop End position in samples.
last
penult

Libraries

In SoundTable\SE\libraries\ there are several libraries which contain settings for sounds with their internal assigned names.

Name Description
unk1 ? always 128
unk2
unk3
unk4
unk5
unk6
type Always 80
mOffset
NameOffset ? Always 0
name Internal Name of the soundeffect (e.g. "SE_SV_LV_YOSHI_FLUTTER")