RhythmRevolution

An editor for Nintendo Wii sound archives (BRSAR).

View on GitHub

Wave Sound Data (.brwsd)

BRWSD or Binary Wave Sound Data contains information about how to read Waves in a Wave Archive.

The Main File

The main file contains of a File Header, Data block, and a Wave block.

Type Description
FileHeader File Header (Magic: RSAR)
Block Data Block
Block Wave Block

File Versions

Wave Sound Datas contain 4 different versions that change how data is read and written.

File Version Description
1.0 Original version that is the most different
1.1 Fixes a data bug and changes the Wave block
1.2 Adds a send parameter
1.3 References Waves in Wave Archive instead of using a Wave block

Data Block

Contains information about how to read the Waves. Magic is DATA.

Offset Type Description
0x00 u32 Number of Wave Sound Entries
0x04 Reference<WaveSoundEntry>[NumWaveSoundEntries] Wave Sound Entry References
0x0C WaveSoundEntry[NumWaveSoundEntries] Wave Sound Entries

Wave Sound Entry

Tells how to read a Wave Sound Entry.

Offset Type Description
0x00 Reference<WaveSoundInfo> Wave Sound Info Reference
0x08 Reference<Table<Reference<TrackInfo>>> Tracks Table Reference
0x10 Reference<Table<Reference<NoteInfo>>> Note Table Reference
0x18 Table<Reference<TrackInfo>> Track Table
—- Wave Sound Info  
—- TrackInfo[NumTracks] Tracks
—- Table<Reference<NoteInfo>> Note Table
—- NoteInfo[NumNotes] Notes

Wave Sound Info

Contains information about the Wave Sound Entry.

Offset Type Description
0x00 f32 Pitch. Is always 1 if the version is 1.0
0x04 u8 Pan. 64 is middle with 127 being right and 0 being left. Is always 64 if version is 1.0
0x05 u8 Surround Pan. Always 0 if version is 1.0
0x06 u8 FX Send A. Always 0 in versions < 1.2
0x07 u8 FX Send B. Always 0 in versions < 1.2
0x08 u8 FX Send C. Always 0 in versions < 1.2
0x09 u8 Main Send. Always 127 in versions < 1.2
0x0A u8[2] Padding
0x0C Reference<null> Null Reference to Graph Envelope Table, never was implemented
0x14 Reference<null> Null Reference to Randomizer Table, never was implemented
0x1C u32 Reserved

Track Info

Contains a table of Note Events for each track.

Offset Type Description
0x00 Reference<Table<Reference<NoteEvent>>> Reference to Note Event Table
0x08 Table<Reference<NoteEvent>> Note Event Table
—- NoteEvent[NumNoteEvents] Note Events
Note Event

A Note Event to play on the track.

Offset Type Description
0x00 f32 Note Position
0x04 f32 Note Length
0x08 u32 Note Index
0x0C u32 Reserved

Note Info

Contains information on how to play a note.

Offset Type Description
0x00 s32 Wave Index (either in Wave block or Wave Archive)
0x04 u8 Attack
0x05 u8 Decay
0x06 u8 Sustain
0x07 u8 Release
0x08 u8 Hold
0x09 u8[3] Padding
0x0C u8 Original Key
0x0D u8 Volume
0x0E u8 Pan. 64 is middle with 127 being right and 0 being left. Is always 64 if version is 1.0
0x0F u8 Surround Pan. Always 0 if version is 1.0
0x10 f32 Pitch. Is always 1 if the version is 1.0
0x14 Reference<null> Null Reference to LFO Table, never was implemented
0x1C Reference<null> Null Reference to Graph Envelope Table, never was implemented
0x24 Reference<null> Null Reference to Randomizer Table, never was implemented
0x2C u32 Reserved

Wave Block

Contains information about how to read the Waves. Waves are most likely 0x20 aligned. Magic is WAVE. Note, this block can be null and is if the file version is 1.3 or greater.

Offset Type Description
0x00 u32 Number of waves (only present in versions >= 1.1)
0x04 r32[NumWaves] Offsets to Wave files relative to the start of the Wave block, not the Wave block body
—- Wave[NumWaves] Wave files