<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.3dbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gota7</id>
	<title>3dbrew - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.3dbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gota7"/>
	<link rel="alternate" type="text/html" href="https://www.3dbrew.org/wiki/Special:Contributions/Gota7"/>
	<updated>2026-05-02T21:57:38Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=BCSTM&amp;diff=20688</id>
		<title>BCSTM</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=BCSTM&amp;diff=20688"/>
		<updated>2018-05-09T20:30:28Z</updated>

		<summary type="html">&lt;p&gt;Gota7: /* Tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:File formats]]&lt;br /&gt;
This document is about the format of CTR Streams (CSTM).&lt;br /&gt;
&lt;br /&gt;
=== Overview ===&lt;br /&gt;
&lt;br /&gt;
The structure is similar to that of a [[BCWAV]], with a few differences, such as its different INFO block format, the addition of a SEEK block, and the organization of the DATA block samples into blocks.&lt;br /&gt;
&lt;br /&gt;
These files are either found in rom:\sound\stream\ or they can be inside of a CSAR.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! OFFSET !! SIZE !!  DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
| 0x000 || 4 || Magic (CSTM)&lt;br /&gt;
|-&lt;br /&gt;
| 0x004 || 2 || Endianness (0xFEFF = little, 0xFFFE = big)&lt;br /&gt;
|-&lt;br /&gt;
| 0x006 || 2 || Header Size (0x40 due to [[#Info Block|Info Block]] alignment)&lt;br /&gt;
|-&lt;br /&gt;
| 0x008 || 4 || Version (0x02000000)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00C || 4 || File Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x010 || 2 || Number of Blocks (3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x012 || 2 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x014 || 12 || [[#Info Block|Info Block]] [[#Sized Reference|Sized Reference]] (Offset relative to start of file)&lt;br /&gt;
|-&lt;br /&gt;
| 0x020 || 12 || [[#Seek Block|Seek Block]] [[#Sized Reference|Sized Reference]] (Offset relative to start of file)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02C || 12 || [[#Data Block|Data Block]] [[#Sized Reference|Sized Reference]] (Offset relative to start of file)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Block Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! OFFSET !! SIZE !!  DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
| 0x000 || 4 || Magic&lt;br /&gt;
|-&lt;br /&gt;
| 0x004 || 4 || Size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Block Types ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! MAGIC !! TYPE&lt;br /&gt;
|-&lt;br /&gt;
| INFO || [[#Info Block|Info Block]]&lt;br /&gt;
|-&lt;br /&gt;
| SEEK || [[#Seek Block|Seek Block]]&lt;br /&gt;
|-&lt;br /&gt;
| DATA || [[#Data Block|Data Block]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Info Block ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! OFFSET !! SIZE !!  DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
| 0x000 || 8 || [[#Block Header|Block Header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x008 || 8 || [[#Stream Info|Stream Info]] [[#Reference|Reference]] (Offset relative to this field)&lt;br /&gt;
|-&lt;br /&gt;
| 0x010 || 8 || [[#Track Info|Track Info]] [[#Reference Table|Reference Table]] [[#Reference|Reference]] (Offset relative to [[#Stream Info|Stream Info]] [[#Reference|Reference]] field)&lt;br /&gt;
|-&lt;br /&gt;
| 0x018 || 8 || [[#Channel Info|Channel Info]] [[#Reference Table|Reference Table]] [[#Reference|Reference]] (Offset relative to [[#Stream Info|Stream Info]] [[#Reference|Reference]] field)&lt;br /&gt;
|-&lt;br /&gt;
| 0x020 || 56 || [[#Stream Info|Stream Info]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x058 || X || [[#Track Info|Track Info]] [[#Reference Table|Reference Table]]&lt;br /&gt;
|-&lt;br /&gt;
| X || X || [[#Channel Info|Channel Info]] [[#Reference Table|Reference Table]]&lt;br /&gt;
|-&lt;br /&gt;
| X || X || [[#Track Info|Track Info]] Entries&lt;br /&gt;
|-&lt;br /&gt;
| X || X || [[#Channel Info|Channel Info]] Entries&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If encoding is DSP ADPCM:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! OFFSET !! SIZE !!  DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
| X || X || [[#DSP ADPCM Info|DSP ADPCM Info]] Entries&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If encoding is IMA ADPCM:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! OFFSET !! SIZE !!  DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
| X || X || [[#IMA ADPCM Info|IMA ADPCM Info]] Entries&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The info block is aligned to 0x20 bytes.&lt;br /&gt;
&lt;br /&gt;
==== Encoding ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! VALUE !! DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
| 0 || PCM8&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PCM16&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DSP ADPCM&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IMA ADPCM&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Stream Info ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! OFFSET !! SIZE !!  DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
| 0x000 || 1 || [[#Encoding|Encoding]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001 || 1 || Loop (0 = don&#039;t loop, 1 = loop)&lt;br /&gt;
|-&lt;br /&gt;
| 0x002 || 1 || Channel Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x003 || 1 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x004 || 4 || Sample Rate&lt;br /&gt;
|-&lt;br /&gt;
| 0x008 || 4 || Loop Start Frame&lt;br /&gt;
|-&lt;br /&gt;
| 0x00C || 4 || Loop End Frame&lt;br /&gt;
|-&lt;br /&gt;
| 0x010 || 4 || Sample Block Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x014 || 4 || Sample Block Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x018 || 4 || Sample Block Sample Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x01C || 4 || Last Sample Block Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x020 || 4 || Last Sample Block Sample Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x024 || 4 || Last Sample Block Padded Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x028 || 4 || Seek Data Size&lt;br /&gt;
|-&lt;br /&gt;
| 0x02C || 4 || Seek Interval Sample Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x030 || 8 || Sample Data [[#Reference|Reference]] (Offset relative to [[#Data Block|Data Block]] Data field)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Track Info ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! OFFSET !! SIZE !!  DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
| 0x000 || 1 || Volume&lt;br /&gt;
|-&lt;br /&gt;
| 0x001 || 1 || Pan&lt;br /&gt;
|-&lt;br /&gt;
| 0x002 || 2 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x004 || 8 || Channel Index [[#Byte Table|Byte Table]] [[#Reference|Reference]] (Offset relative to Volume field)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00C || X || Channel Index [[#Byte Table|Byte Table]] (Padded to 4 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Byte Table =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! OFFSET !! SIZE !!  DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
| 0x000 || 4 || Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x004 || Count || Elements&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Channel Info ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! OFFSET !! SIZE !!  DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
| 0x000 || 8 || ADPCM Info [[#Reference|Reference]]  (Offset relative to this field)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== DSP ADPCM Info =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! OFFSET !! SIZE !!  DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
| 0x000 || 32 || [[#DSP ADPCM Param|Param]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x020 || 6 || [[#DSP ADPCM Context|Context]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x026 || 6 || Loop [[#DSP ADPCM Context|Context]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x02C || 2 || Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== DSP ADPCM Param ======&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! OFFSET !! SIZE !!  DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
| 0x000 || 32 || 16-bit Coefficients&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== DSP ADPCM Context ======&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! OFFSET !! SIZE !!  DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
| 0x000 || 1 || 4-bit Predictor + 4-bit Scale&lt;br /&gt;
|-&lt;br /&gt;
| 0x001 || 1 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x002 || 2 || Previous Sample&lt;br /&gt;
|-&lt;br /&gt;
| 0x004 || 2 || Second Previous Sample&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== IMA ADPCM Info =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! OFFSET !! SIZE !!  DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
| 0x000 || 4 || [[#IMA ADPCM Context|Context]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004 || 4 || Loop [[#IMA ADPCM Context|Context]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====== IMA ADPCM Context ======&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! OFFSET !! SIZE !!  DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
| 0x000 || 2 || Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x002 || 1 || Table Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x003 || 1 || Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Seek Block ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! OFFSET !! SIZE !!  DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
| 0x000 || 8 || [[#Block Header|Block Header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x008 || [[#Block Header|Block Header]] Size Value - 8 || Data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The seek block is aligned to 0x20 bytes.&lt;br /&gt;
&lt;br /&gt;
=== Data Block ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! OFFSET !! SIZE !!  DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
| 0x000 || 8 || [[#Block Header|Block Header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x008 || [[#Block Header|Block Header]] Size Value - 8 || Data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The data block is aligned to 0x20 bytes, as well as the data field&#039;s actual sample data.&lt;br /&gt;
&lt;br /&gt;
=== Reference Table ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! OFFSET !! SIZE !!  DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
| 0x000 || 4 || Count&lt;br /&gt;
|-&lt;br /&gt;
| 0x004 || Count * 8 || [[#Reference|References]] (Offsets relative to Count field)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sized Reference ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! OFFSET !! SIZE !!  DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
| 0x000 || 8 || [[#Reference|Reference]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x008 || 4 || Size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Reference ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! OFFSET !! SIZE !!  DESCRIPTION&lt;br /&gt;
|-&lt;br /&gt;
| 0x000 || 2 || Type ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x002 || 2 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x004 || 4 || Offset (&amp;quot;null&amp;quot; = 0xFFFFFFFF)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Reference Types ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ID !! TYPE&lt;br /&gt;
|-&lt;br /&gt;
| 0x0100 || [[#Byte Table|Byte Table]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0101 || [[#Reference Table|Reference Table]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0300 || [[#DSP ADPCM Info|DSP ADPCM Info]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0301 || [[#IMA ADPCM Info|IMA ADPCM Info]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F00 || [[#Data_Block|Sample Data]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4000 || [[#Info Block|Info Block]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4001 || [[#Seek Block|Seek Block]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4002 || [[#Data Block|Data Block]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4100 || [[#Stream Info|Stream Info]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4101 || [[#Track Info|Track Info]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4102 || [[#Channel Info|Channel Info]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Tools==&lt;br /&gt;
The following tools can play BCSTMs and convert them to other formats:&lt;br /&gt;
* [https://gota7.github.io/Citric-Composer/ Isabelle Sound Editor]&lt;br /&gt;
* vgmstream&lt;br /&gt;
* Every File Explorer&lt;/div&gt;</summary>
		<author><name>Gota7</name></author>
	</entry>
</feed>