BCSAR: Difference between revisions

MarcusD (talk | contribs)
Swosho (talk | contribs)
m BCSAR View added to the Tools
 
(6 intermediate revisions by 5 users not shown)
Line 1: Line 1:
[[Category:File formats]]
The BCSAR (Binary CTR Sound ARchive) format is the 3DS's equivalent of the Wii's BRSAR  format. They're not the same structures, though, but they do have the same purpose.
== Overview ==
 
The BCSAR (CTR Sound ARchive) format is the 3DS's equivalent of the Wii's BRSAR  format. They're not the same structures, though, but they do have the same purpose.


BCSAR are located in the RomFS, this is usually stored under "romfs:/sound/<name>.bcsar". This contains various audio formats, such as CSTM, CWSD, and CWAV.
BCSAR are located in the RomFS, this is usually stored under "romfs:/sound/<name>.bcsar". This contains various audio formats, such as CSTM, CWSD, CSEQ, and CWAV.


== BCSAR Header ==
== BCSAR Header ==
Line 40: Line 37:
|  0x14
|  0x14
|  0x4
|  0x4
Partition header length [same for each partition? (ie STRG,INFO,and FILE header lengths)]
STRG partition reference ID? (Always 0x2000)
|-
|-
|  0x18
|  0x18
Line 52: Line 49:
|  0x20
|  0x20
|  0x4
|  0x4
Unknown (always 0x01200000?)
INFO partition reference ID? (Always 0x2001)
|-
|-
|  0x24
|  0x24
Line 61: Line 58:
|  0x4
|  0x4
|  Length of INFO partition
|  Length of INFO partition
|-
|  0x2C
|  0x4
|  Main FILE partition reference ID? (Always 0x2002)
|-
|-
|  0x30
|  0x30
Line 201: Line 202:
|  0xC
|  0xC
|  0x4
|  0x4
|  String lookup table index
|  String lookup table index (-1 if unused)
|-
|-
|  0x10
|  0x10
|  0x3
|  0x3
|  3-byte Resource ID, Little Endian
|  3-byte Resource ID, Little Endian (-1 if unused)
|-
|-
|  0x13
|  0x13
|  0x1
|  0x1
|  Resource type (01=sound, 02=sound list, 03=sound bank, 04=sound player name?, 05=?, 06=sound group)
|  Resource type (01=sound, 02=sound list, 03=sound bank, 04=sound player name?, 06=sound group, FF=unused)
|-
|-
|}
|}
Line 218: Line 219:


For now I only know some information in the header for this partition, but I'm working on figuring the rest out.
For now I only know some information in the header for this partition, but I'm working on figuring the rest out.
==== Header ====


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 235: Line 238:
|  0x8
|  0x8
|  0x4
|  0x4
Unknown magic 0x2100
Audio Table Reference ID (0x2100)
|-
|-
|  0xC
|  0xC
|  0x4
|  0x4
|  This + 8 points to unknown
|  This + 8 points to the Audio Table
|-
|-
|  0x10
|  0x10
|  0x4
|  0x4
Unknown magic 0x2104
Set Table Reference ID (0x2104)
|-
|-
|  0x14
|  0x14
|  0x4
|  0x4
|  This + 8 points to unknown
|  This + 8 points to the Set Table
|-
|-
|  0x18
|  0x18
|  0x4
|  0x4
Unknown magic 0x2101
Bank Table Reference ID (0x2101)
|-
|-
|  0x1C
|  0x1C
|  0x4
|  0x4
|  This + 8 points to unknown
|  This + 8 points to the Bank Table
|-
|-
|  0x20
|  0x20
|  0x4
|  0x4
Unknown magic 0x2103
WAV Archive Table Reference ID (0x2103)
|-
|-
|  0x24
|  0x24
|  0x4
|  0x4
|  This + 8 points to unknown
|  This + 8 points to the WAV Archive Table
|-
|-
|  0x28
|  0x28
|  0x4
|  0x4
Unknown magic 0x2105
Group Table Reference ID (0x2105)
|-
|-
|  0x2C
|  0x2C
|  0x4
|  0x4
|  This + 8 points to unknown
|  This + 8 points to the Group Table
|-
|-
|  0x30
|  0x30
|  0x4
|  0x4
Unknown magic 0x2102
Player Table Reference ID (0x2102)
|-
|-
|  0x34
|  0x34
|  0x4
|  0x4
|  This + 8 points to unknown
|  This + 8 points to Player Table
|-
|-
|  0x38
|  0x38
|  0x4
|  0x4
Unknown magic 0x2106
FILE Table Reference ID (0x2106)
|-
|-
|  0x3C
|  0x3C
|  0x4
|  0x4
|  This + 8 points to unknown
|  This + 8 points to the FILE Table
|-
|-
|  0x40
|  0x40
|  0x4
|  0x4
|  Unknown magic 0x220B
|  Unknown Table Reference ID (0x220B)
|-
|-
|  0x44
|  0x44
|  0x4
|  0x4
|  This + 8 points to unknown
|  This + 8 points to unknown
|-
|}
==== Blocks ====
Every offset in the header points to data similar to this:
* 4byte length
* length array of the below struct
** u32 type
** u32 offset relative to the address of the length field (beginning of the block)
The data the offset points to is dependent on the type of the above struct:
===== 0x2200 =====
{| class="wikitable" border="1"
|-
!  OFFSET
!  SIZE
!  DESCRIPTION
|-
|  0x0
|  0x4
|  Unknown
|-
|  0x4
|  0x4
|  Sound player ID
|-
|  0x8
|  0x4
|  Unknown
|-
|  0xC
|  0x4
|  Type of the extended info
|-
|  0x10
|  0x4
|  Offset to extended info *relative to the beginning of this struct*
|-
|  0x14
|  ???
|  Unknown...
|-
|}
===== 0x2204 =====
{| class="wikitable" border="1"
|-
!  OFFSET
!  SIZE
!  DESCRIPTION
|-
|  0x0
|  0x4
|  First Sound ID in this sequence set
|-
|  0x4
|  0x4
|  Last Sound ID in this sequence set
|-
|  0x8
|  0x4
|  Type of the extended info
|-
|  0xC
|  0x4
|  Offset to extended info *relative to the beginning of this struct*
|-
|  0x10
|  0x4
|  Type of the extended info
|-
|  0x14
|  0x4
|  Offset to extended info *relative to the beginning of this struct*
|-
|  0x18
|  0x4
|  Unknown
|-
|  0x1C
|  0x4
|  Unknown
|-
|}
===== 0x2206 =====
{| class="wikitable" border="1"
|-
!  OFFSET
!  SIZE
!  DESCRIPTION
|-
|  0x0
|  0x4
|  Unknown
|-
|  0x4
|  0x4
|  Type of the extended info
|-
|  0x8
|  0x4
|  Offset to extended info *relative to the beginning of this struct*
|-
|  0xC
|  0x4
|  Unknown
|-
|  0x10
|  0x4
|  Unknown
|-
|}
===== Table IDs =====
{| class="wikitable" border="1"
|-
!  ID
!  NAME
|-
|  0x2200
|  Audio Table
|-
|  0x2204
|  Set Table
|-
|  0x2206
|  Bank Table
|-
|  0x2207
|  WAV Archive Table
|-
|  0x2208
|  Group Table
|-
|  0x2208
|  Player Table
|-
|  0x220A
|  FILE Table
|-
|-
|}
|}
Line 317: Line 466:
|  Length of FILE partition (also in CSAR header)
|  Length of FILE partition (also in CSAR header)
|-
|-
|  0x8
|  0x24
|  Padding
|}
|}


Line 327: Line 479:
== Tools ==
== Tools ==
* vgmtoolbox's Advanced Cutter/Offset Finder tool can extract BCWAVs without filenames
* vgmtoolbox's Advanced Cutter/Offset Finder tool can extract BCWAVs without filenames
* [https://github.com/soneek/3DSUSoundArchiveTool 3DSUSoundArchiveTool] reference implementation of CSAR extraction
* [https://github.com/thane98/BCSAR-View BCSAR View]
* [https://github.com/Gota7/Citric-Composer Citric Composer]
[[Category:File formats]]