<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://www.metroid2002.com/retromodding/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=MrSinistar</id>
		<title>Retro Modding Wiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://www.metroid2002.com/retromodding/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=MrSinistar"/>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/wiki/Special:Contributions/MrSinistar"/>
		<updated>2026-05-02T17:53:33Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.24.1</generator>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=1120</id>
		<title>User:MrSinistar/Sandbox</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=1120"/>
				<updated>2015-05-22T07:43:07Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: /* SCLY RoomAcoustics */ Cracked RoomAcoustics!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AGSC uses MusyX data for the audio engine.  Each sound has it's own &amp;quot;SoundMacro&amp;quot; and properties.  The '''pool chunk''' is where the soundmacros are located.  SoundMacros are small scripts that control how sounds are played in game, like pitch or vibrato or fade outs.  Here's a description of the pool chunk:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Header size''' Looks like it's always 10&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Macro size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 2&lt;br /&gt;
| '''Macro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| colspan=2 {{unknown|Macro data, needs more research}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
STRG Commands are similar to CSS syntax.  A ; terminates the command.  &amp;amp; begins the command, so for example, &amp;amp;just=center;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| just  &lt;br /&gt;
| center&lt;br /&gt;
| Justifies text&lt;br /&gt;
|-&lt;br /&gt;
| image&lt;br /&gt;
| SI,0.70,0.68,[[TXTR (File Format)|TXTR]] ID&lt;br /&gt;
| Displays an image.  SI = Single Image? S,T and finally TXTR ID.  Animation = SA, Animation Speed, S,T, TXTR ID, TXTR ID&lt;br /&gt;
|-&lt;br /&gt;
| main-color&lt;br /&gt;
| Hex Color Code&lt;br /&gt;
| Changes color of text.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===SCLY Audio Object===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| '''SCLY Byte''' 0x14 denotes sound&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| N&lt;br /&gt;
| '''Sound name'''; zero-terminated&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sound Effects ID''' index number for [[ATBL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 1&lt;br /&gt;
| '''Play Automatically'''; If this bool is turned on, but the active bool is not on, the corresponding trigger must send a Play message (0x14) to turn on the sound.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Maximum Distance (float)'''; the bigger the float, the farther you can hear it! &lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| 4&lt;br /&gt;
| '''Minimum Distance (float)'''; usually set to 0.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| 4&lt;br /&gt;
| '''Padding'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| 4&lt;br /&gt;
| '''Priority'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Max. Volume'''; 127 is loudest&lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| 4&lt;br /&gt;
| '''Min. Volume'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| 4&lt;br /&gt;
| '''Panning''' 0=Left, 64=Center, 127=Right&lt;br /&gt;
|-&lt;br /&gt;
| 0x39&lt;br /&gt;
| 1&lt;br /&gt;
| '''Play endlessly'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| 1&lt;br /&gt;
| '''Play everywhere'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B&lt;br /&gt;
| 1&lt;br /&gt;
| '''Active/Accepts Trigger Activations'''; this must be on and it's corresponding trigger has to activate/deactivate the sound object in order to play/stop sound.  Triggers sending a Play message (0x14) won't turn on the sound.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D&lt;br /&gt;
| 1&lt;br /&gt;
| '''Is sound affected by RoomAcoustics?'''; 1=yes, 0=no&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}}; Is On for Health pickups (ITD or Surround flag?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}; (FF FF FF FF, usually descending...seen on cinematic sounds)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
so, if what we are assuming are the play automatically bool and the active bool are both on, then the sound plays immediately on spawn and never plays again, even when the trigger is suppose to activate it.&lt;br /&gt;
&lt;br /&gt;
atbl bool = 0, 3rd bool = 1...sound doesn't play automatically but activates when going through trigger.&lt;br /&gt;
&lt;br /&gt;
atbl bool = 1, 3rd bool = 1...sound plays automatically and deactives/activates correctly when going through trigger.&lt;br /&gt;
&lt;br /&gt;
atbl bool = 1, 3rd bool = 0, nothing plays&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SCLY RoomAcoustics===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size (h)&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| '''Active flag'''; 1 = on, 0 = off&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}; always 0x75&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 27&lt;br /&gt;
| '''Padding'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}}; always 0x1&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E&lt;br /&gt;
| 1&lt;br /&gt;
| '''Padding'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F&lt;br /&gt;
| 4&lt;br /&gt;
| '''Decay (float)'''; Reverb decay length (in seconds). Value must be between 0.01 and 10.0.  Can make it sound like small room to a large cathedral. &lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| 4&lt;br /&gt;
| '''Predelay (float)'''; Length of time before reverb starts (in seconds). Value must be between 0.0 and 0.1.  Simulates latency for reflected sound waves over long distances.&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| 4&lt;br /&gt;
| '''Damping (float)'''; Dampens the high-frequencies.  Value must be between 0.0 and 1.0. Sort of like a filter, 0.0 has lots of bass, 1.0 has lots of high end.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B&lt;br /&gt;
| 4&lt;br /&gt;
| '''Color (float)'''; Basically, an equalizer.  Value must be between 0.0 and 1.0.  Balances out frequencies to simulate the acoustic properties of different surfaces in a room.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F&lt;br /&gt;
| 4&lt;br /&gt;
| '''Mix (float)'''; Value must be between 0.0 and 1.0. 0.0 means that only the original sound will be audible, whereas 1.0 will only make the reverberated signal be heard.&lt;br /&gt;
|-&lt;br /&gt;
| 0x43&lt;br /&gt;
| 25&lt;br /&gt;
| '''Padding'''&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center; margin-bottom:20px; float:center; border:1px solid; box-shadow: 0 0 5px #6DBACD; border-radius:6px; border-color:#6dbacd;&amp;quot;  ! width=&amp;quot;45%&amp;quot;&lt;br /&gt;
|[[File:Powercannon_render3.png|200px]]&lt;br /&gt;
|'''Help us research and document!  Join the discussion at: [https://m2k2.taigaforum.com/post/metroid_prime_hacking_research.html Metroid Prime Hacking Research thread @ Metroid2002.com]'''&lt;br /&gt;
{|align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center;&amp;quot;&lt;br /&gt;
|[[File:Morphball_wire.png|50px|link=Category:Major research needed]]&lt;br /&gt;
|[[File:Morphball_wirerender.png|50px|link=Category:Moderate research needed]]&lt;br /&gt;
|[[File:Morphball_render.png|50px|link=Category:Minor research needed]]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Major research needed|'''File formats that need major research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Moderate research needed|'''File formats that need moderate research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Minor research needed|'''File formats that need minor research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=1119</id>
		<title>User:MrSinistar/Sandbox</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=1119"/>
				<updated>2015-05-22T04:15:56Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: /* SCLY Audio Object */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AGSC uses MusyX data for the audio engine.  Each sound has it's own &amp;quot;SoundMacro&amp;quot; and properties.  The '''pool chunk''' is where the soundmacros are located.  SoundMacros are small scripts that control how sounds are played in game, like pitch or vibrato or fade outs.  Here's a description of the pool chunk:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Header size''' Looks like it's always 10&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Macro size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 2&lt;br /&gt;
| '''Macro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| colspan=2 {{unknown|Macro data, needs more research}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
STRG Commands are similar to CSS syntax.  A ; terminates the command.  &amp;amp; begins the command, so for example, &amp;amp;just=center;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| just  &lt;br /&gt;
| center&lt;br /&gt;
| Justifies text&lt;br /&gt;
|-&lt;br /&gt;
| image&lt;br /&gt;
| SI,0.70,0.68,[[TXTR (File Format)|TXTR]] ID&lt;br /&gt;
| Displays an image.  SI = Single Image? S,T and finally TXTR ID.  Animation = SA, Animation Speed, S,T, TXTR ID, TXTR ID&lt;br /&gt;
|-&lt;br /&gt;
| main-color&lt;br /&gt;
| Hex Color Code&lt;br /&gt;
| Changes color of text.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===SCLY Audio Object===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| '''SCLY Byte''' 0x14 denotes sound&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| N&lt;br /&gt;
| '''Sound name'''; zero-terminated&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sound Effects ID''' index number for [[ATBL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 1&lt;br /&gt;
| '''Play Automatically'''; If this bool is turned on, but the active bool is not on, the corresponding trigger must send a Play message (0x14) to turn on the sound.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Maximum Distance (float)'''; the bigger the float, the farther you can hear it! &lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| 4&lt;br /&gt;
| '''Minimum Distance (float)'''; usually set to 0.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| 4&lt;br /&gt;
| '''Padding'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| 4&lt;br /&gt;
| '''Priority'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Max. Volume'''; 127 is loudest&lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| 4&lt;br /&gt;
| '''Min. Volume'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| 4&lt;br /&gt;
| '''Panning''' 0=Left, 64=Center, 127=Right&lt;br /&gt;
|-&lt;br /&gt;
| 0x39&lt;br /&gt;
| 1&lt;br /&gt;
| '''Play endlessly'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| 1&lt;br /&gt;
| '''Play everywhere'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B&lt;br /&gt;
| 1&lt;br /&gt;
| '''Active/Accepts Trigger Activations'''; this must be on and it's corresponding trigger has to activate/deactivate the sound object in order to play/stop sound.  Triggers sending a Play message (0x14) won't turn on the sound.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D&lt;br /&gt;
| 1&lt;br /&gt;
| '''Is sound affected by RoomAcoustics?'''; 1=yes, 0=no&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}}; Is On for Health pickups (ITD or Surround flag?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}; (FF FF FF FF, usually descending...seen on cinematic sounds)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
so, if what we are assuming are the play automatically bool and the active bool are both on, then the sound plays immediately on spawn and never plays again, even when the trigger is suppose to activate it.&lt;br /&gt;
&lt;br /&gt;
atbl bool = 0, 3rd bool = 1...sound doesn't play automatically but activates when going through trigger.&lt;br /&gt;
&lt;br /&gt;
atbl bool = 1, 3rd bool = 1...sound plays automatically and deactives/activates correctly when going through trigger.&lt;br /&gt;
&lt;br /&gt;
atbl bool = 1, 3rd bool = 0, nothing plays&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===SCLY RoomAcoustics===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| '''Reverb flag'''; 1 = on, 0 = off&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sound Effects ID''' index number for [[ATBL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 1&lt;br /&gt;
| '''Play Automatically'''; If this bool is turned on, but the active bool is not on, the corresponding trigger must send a Play message (0x14) to turn on the sound.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Maximum Distance (float)'''; the bigger the float, the farther you can hear it! &lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| 4&lt;br /&gt;
| '''Minimum Distance (float)'''; usually set to 0.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| 4&lt;br /&gt;
| '''Padding'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| 4&lt;br /&gt;
| '''Priority'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Max. Volume'''; 127 is loudest&lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| 4&lt;br /&gt;
| '''Min. Volume'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| 4&lt;br /&gt;
| '''Panning''' 0=Left, 64=Center, 127=Right&lt;br /&gt;
|-&lt;br /&gt;
| 0x39&lt;br /&gt;
| 1&lt;br /&gt;
| '''Play endlessly'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| 1&lt;br /&gt;
| '''Play everywhere'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B&lt;br /&gt;
| 1&lt;br /&gt;
| '''Active/Accepts Trigger Activations'''; this must be on and it's corresponding trigger has to activate/deactivate the sound object in order to play/stop sound.  Triggers sending a Play message (0x14) won't turn on the sound.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D&lt;br /&gt;
| 1&lt;br /&gt;
| '''Is sound affected by RoomAcoustics?'''; 1=yes, 0=no&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}}; Is On for Health pickups (ITD or Surround flag?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}; (FF FF FF FF, usually descending...seen on cinematic sounds)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center; margin-bottom:20px; float:center; border:1px solid; box-shadow: 0 0 5px #6DBACD; border-radius:6px; border-color:#6dbacd;&amp;quot;  ! width=&amp;quot;45%&amp;quot;&lt;br /&gt;
|[[File:Powercannon_render3.png|200px]]&lt;br /&gt;
|'''Help us research and document!  Join the discussion at: [https://m2k2.taigaforum.com/post/metroid_prime_hacking_research.html Metroid Prime Hacking Research thread @ Metroid2002.com]'''&lt;br /&gt;
{|align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center;&amp;quot;&lt;br /&gt;
|[[File:Morphball_wire.png|50px|link=Category:Major research needed]]&lt;br /&gt;
|[[File:Morphball_wirerender.png|50px|link=Category:Moderate research needed]]&lt;br /&gt;
|[[File:Morphball_render.png|50px|link=Category:Minor research needed]]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Major research needed|'''File formats that need major research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Moderate research needed|'''File formats that need moderate research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Minor research needed|'''File formats that need minor research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=1077</id>
		<title>User:MrSinistar/Sandbox</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=1077"/>
				<updated>2015-04-22T06:46:58Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: /* SCLY Audio Object */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AGSC uses MusyX data for the audio engine.  Each sound has it's own &amp;quot;SoundMacro&amp;quot; and properties.  The '''pool chunk''' is where the soundmacros are located.  SoundMacros are small scripts that control how sounds are played in game, like pitch or vibrato or fade outs.  Here's a description of the pool chunk:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Header size''' Looks like it's always 10&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Macro size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 2&lt;br /&gt;
| '''Macro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| colspan=2 {{unknown|Macro data, needs more research}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
STRG Commands are similar to CSS syntax.  A ; terminates the command.  &amp;amp; begins the command, so for example, &amp;amp;just=center;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| just  &lt;br /&gt;
| center&lt;br /&gt;
| Justifies text&lt;br /&gt;
|-&lt;br /&gt;
| image&lt;br /&gt;
| SI,0.70,0.68,[[TXTR (File Format)|TXTR]] ID&lt;br /&gt;
| Displays an image.  SI = Single Image? S,T and finally TXTR ID.  Animation = SA, Animation Speed, S,T, TXTR ID, TXTR ID&lt;br /&gt;
|-&lt;br /&gt;
| main-color&lt;br /&gt;
| Hex Color Code&lt;br /&gt;
| Changes color of text.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===SCLY Audio Object===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| '''SCLY Byte''' 0x14 denotes sound&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| N&lt;br /&gt;
| '''Sound name'''; zero-terminated&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sound Effects ID''' index number for [[ATBL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 1&lt;br /&gt;
| '''Play Automatically'''; If this bool is turned on, but the active bool is not on, the corresponding trigger must send a Play message (0x14) to turn on the sound.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Maximum Distance (float)'''; the bigger the float, the farther you can hear it! &lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| 4&lt;br /&gt;
| '''Minimum Distance (float)'''; usually set to 0.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| 4&lt;br /&gt;
| '''Padding'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| 4&lt;br /&gt;
| '''Priority'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Max. Volume'''; 127 is loudest&lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| 4&lt;br /&gt;
| '''Min. Volume'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| 4&lt;br /&gt;
| '''Panning''' 0=Left, 64=Center, 127=Right&lt;br /&gt;
|-&lt;br /&gt;
| 0x39&lt;br /&gt;
| 1&lt;br /&gt;
| '''Play endlessly'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| 1&lt;br /&gt;
| '''Play everywhere'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B&lt;br /&gt;
| 1&lt;br /&gt;
| '''Active/Accepts Trigger Activations'''; this must be on and it's corresponding trigger has to activate/deactivate the sound object in order to play/stop sound.  Triggers sending a Play message (0x14) won't turn on the sound.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D&lt;br /&gt;
| 1&lt;br /&gt;
| '''Is sound affected by RoomAcoustics?'''; 1=yes, 0=no&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}}; Is On for Health pickups (ITD or Surround flag?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}; (FF FF FF FF, usually descending...seen on cinematic sounds)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
so, if what we are assuming are the play automatically bool and the active bool are both on, then the sound plays immediately on spawn and never plays again, even when the trigger is suppose to activate it.&lt;br /&gt;
&lt;br /&gt;
atbl bool = 0, 3rd bool = 1...sound doesn't play automatically but activates when going through trigger.&lt;br /&gt;
&lt;br /&gt;
atbl bool = 1, 3rd bool = 1...sound plays automatically and deactives/activates correctly when going through trigger.&lt;br /&gt;
&lt;br /&gt;
atbl bool = 1, 3rd bool = 0, nothing plays&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center; margin-bottom:20px; float:center; border:1px solid; box-shadow: 0 0 5px #6DBACD; border-radius:6px; border-color:#6dbacd;&amp;quot;  ! width=&amp;quot;45%&amp;quot;&lt;br /&gt;
|[[File:Powercannon_render3.png|200px]]&lt;br /&gt;
|'''Help us research and document!  Join the discussion at: [https://m2k2.taigaforum.com/post/metroid_prime_hacking_research.html Metroid Prime Hacking Research thread @ Metroid2002.com]'''&lt;br /&gt;
{|align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center;&amp;quot;&lt;br /&gt;
|[[File:Morphball_wire.png|50px|link=Category:Major research needed]]&lt;br /&gt;
|[[File:Morphball_wirerender.png|50px|link=Category:Moderate research needed]]&lt;br /&gt;
|[[File:Morphball_render.png|50px|link=Category:Minor research needed]]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Major research needed|'''File formats that need major research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Moderate research needed|'''File formats that need moderate research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Minor research needed|'''File formats that need minor research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=1076</id>
		<title>User:MrSinistar/Sandbox</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=1076"/>
				<updated>2015-04-22T06:46:28Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: /* SCLY Audio Object */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AGSC uses MusyX data for the audio engine.  Each sound has it's own &amp;quot;SoundMacro&amp;quot; and properties.  The '''pool chunk''' is where the soundmacros are located.  SoundMacros are small scripts that control how sounds are played in game, like pitch or vibrato or fade outs.  Here's a description of the pool chunk:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Header size''' Looks like it's always 10&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Macro size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 2&lt;br /&gt;
| '''Macro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| colspan=2 {{unknown|Macro data, needs more research}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
STRG Commands are similar to CSS syntax.  A ; terminates the command.  &amp;amp; begins the command, so for example, &amp;amp;just=center;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| just  &lt;br /&gt;
| center&lt;br /&gt;
| Justifies text&lt;br /&gt;
|-&lt;br /&gt;
| image&lt;br /&gt;
| SI,0.70,0.68,[[TXTR (File Format)|TXTR]] ID&lt;br /&gt;
| Displays an image.  SI = Single Image? S,T and finally TXTR ID.  Animation = SA, Animation Speed, S,T, TXTR ID, TXTR ID&lt;br /&gt;
|-&lt;br /&gt;
| main-color&lt;br /&gt;
| Hex Color Code&lt;br /&gt;
| Changes color of text.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===SCLY Audio Object===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| '''SCLY Byte''' 0x14 denotes sound&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| N&lt;br /&gt;
| '''Sound name'''; zero-terminated&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sound Effects ID''' index number for [[ATBL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 1&lt;br /&gt;
| '''Play Automatically'''; If this bool is turned on, but the active bool is not on, the corresponding trigger must send a Play message (0x14) to turn on the sound.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Maximum Distance (float)'''; the bigger the float, the farther you can hear it! &lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| 4&lt;br /&gt;
| '''Minimum Distance (float)'''; usually set to 0.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| 4&lt;br /&gt;
| '''Padding'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}} Priority?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Max. Volume'''; 127 is loudest&lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| 4&lt;br /&gt;
| '''Min. Volume'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| 4&lt;br /&gt;
| '''Panning''' 0=Left, 64=Center, 127=Right&lt;br /&gt;
|-&lt;br /&gt;
| 0x39&lt;br /&gt;
| 1&lt;br /&gt;
| '''Play endlessly'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| 1&lt;br /&gt;
| '''Play everywhere'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B&lt;br /&gt;
| 1&lt;br /&gt;
| '''Active/Accepts Trigger Activations'''; this must be on and it's corresponding trigger has to activate/deactivate the sound object in order to play/stop sound.  Triggers sending a Play message (0x14) won't turn on the sound.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D&lt;br /&gt;
| 1&lt;br /&gt;
| '''Is sound affected by RoomAcoustics?'''; 1=yes, 0=no&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}}; Is On for Health pickups (ITD or Surround flag?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}; (FF FF FF FF, usually descending...seen on cinematic sounds)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
so, if what we are assuming are the play automatically bool and the active bool are both on, then the sound plays immediately on spawn and never plays again, even when the trigger is suppose to activate it.&lt;br /&gt;
&lt;br /&gt;
atbl bool = 0, 3rd bool = 1...sound doesn't play automatically but activates when going through trigger.&lt;br /&gt;
&lt;br /&gt;
atbl bool = 1, 3rd bool = 1...sound plays automatically and deactives/activates correctly when going through trigger.&lt;br /&gt;
&lt;br /&gt;
atbl bool = 1, 3rd bool = 0, nothing plays&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center; margin-bottom:20px; float:center; border:1px solid; box-shadow: 0 0 5px #6DBACD; border-radius:6px; border-color:#6dbacd;&amp;quot;  ! width=&amp;quot;45%&amp;quot;&lt;br /&gt;
|[[File:Powercannon_render3.png|200px]]&lt;br /&gt;
|'''Help us research and document!  Join the discussion at: [https://m2k2.taigaforum.com/post/metroid_prime_hacking_research.html Metroid Prime Hacking Research thread @ Metroid2002.com]'''&lt;br /&gt;
{|align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center;&amp;quot;&lt;br /&gt;
|[[File:Morphball_wire.png|50px|link=Category:Major research needed]]&lt;br /&gt;
|[[File:Morphball_wirerender.png|50px|link=Category:Moderate research needed]]&lt;br /&gt;
|[[File:Morphball_render.png|50px|link=Category:Minor research needed]]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Major research needed|'''File formats that need major research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Moderate research needed|'''File formats that need moderate research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Minor research needed|'''File formats that need minor research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=1075</id>
		<title>User:MrSinistar/Sandbox</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=1075"/>
				<updated>2015-04-22T05:44:02Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: /* SCLY Audio Object */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AGSC uses MusyX data for the audio engine.  Each sound has it's own &amp;quot;SoundMacro&amp;quot; and properties.  The '''pool chunk''' is where the soundmacros are located.  SoundMacros are small scripts that control how sounds are played in game, like pitch or vibrato or fade outs.  Here's a description of the pool chunk:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Header size''' Looks like it's always 10&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Macro size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 2&lt;br /&gt;
| '''Macro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| colspan=2 {{unknown|Macro data, needs more research}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
STRG Commands are similar to CSS syntax.  A ; terminates the command.  &amp;amp; begins the command, so for example, &amp;amp;just=center;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| just  &lt;br /&gt;
| center&lt;br /&gt;
| Justifies text&lt;br /&gt;
|-&lt;br /&gt;
| image&lt;br /&gt;
| SI,0.70,0.68,[[TXTR (File Format)|TXTR]] ID&lt;br /&gt;
| Displays an image.  SI = Single Image? S,T and finally TXTR ID.  Animation = SA, Animation Speed, S,T, TXTR ID, TXTR ID&lt;br /&gt;
|-&lt;br /&gt;
| main-color&lt;br /&gt;
| Hex Color Code&lt;br /&gt;
| Changes color of text.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===SCLY Audio Object===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| '''SCLY Byte''' 0x14 denotes sound&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| N&lt;br /&gt;
| '''Sound name'''; zero-terminated&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sound Effects ID''' index number for [[ATBL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 1&lt;br /&gt;
| '''Play Automatically'''; If this bool is turned on, but the active bool is not on, the corresponding trigger must send a Play message (0x14) to turn on the sound.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Maximum Distance (float)'''; the bigger the float, the farther you can hear it! &lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| 4&lt;br /&gt;
| '''Minimum Distance (float)'''; usually set to 0.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| 4&lt;br /&gt;
| '''Padding'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}} Priority?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Max. Volume'''; 127 is loudest&lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| 4&lt;br /&gt;
| '''Min. Volume'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| 4&lt;br /&gt;
| '''Panning''' 0=Left, 64=Center, 127=Right&lt;br /&gt;
|-&lt;br /&gt;
| 0x39&lt;br /&gt;
| 1&lt;br /&gt;
| '''Play endlessly'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| 1&lt;br /&gt;
| '''Play everywhere'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B&lt;br /&gt;
| 1&lt;br /&gt;
| '''Active/Accepts Trigger Activations'''; this must be on and it's corresponding trigger has to activate/deactivate the sound object in order to play/stop sound.  Triggers sending a Play message (0x14) won't turn on the sound.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D&lt;br /&gt;
| 1&lt;br /&gt;
| '''Is sound affected by RoomAcoustics?'''; 1=yes, 0=no&lt;br /&gt;
|-&lt;br /&gt;
| colspan=3 {{unknown|Misc data, needs more research}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
so, if what we are assuming are the play automatically bool and the active bool are both on, then the sound plays immediately on spawn and never plays again, even when the trigger is suppose to activate it.&lt;br /&gt;
&lt;br /&gt;
atbl bool = 0, 3rd bool = 1...sound doesn't play automatically but activates when going through trigger.&lt;br /&gt;
&lt;br /&gt;
atbl bool = 1, 3rd bool = 1...sound plays automatically and deactives/activates correctly when going through trigger.&lt;br /&gt;
&lt;br /&gt;
atbl bool = 1, 3rd bool = 0, nothing plays&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center; margin-bottom:20px; float:center; border:1px solid; box-shadow: 0 0 5px #6DBACD; border-radius:6px; border-color:#6dbacd;&amp;quot;  ! width=&amp;quot;45%&amp;quot;&lt;br /&gt;
|[[File:Powercannon_render3.png|200px]]&lt;br /&gt;
|'''Help us research and document!  Join the discussion at: [https://m2k2.taigaforum.com/post/metroid_prime_hacking_research.html Metroid Prime Hacking Research thread @ Metroid2002.com]'''&lt;br /&gt;
{|align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center;&amp;quot;&lt;br /&gt;
|[[File:Morphball_wire.png|50px|link=Category:Major research needed]]&lt;br /&gt;
|[[File:Morphball_wirerender.png|50px|link=Category:Moderate research needed]]&lt;br /&gt;
|[[File:Morphball_render.png|50px|link=Category:Minor research needed]]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Major research needed|'''File formats that need major research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Moderate research needed|'''File formats that need moderate research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Minor research needed|'''File formats that need minor research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=1074</id>
		<title>User:MrSinistar/Sandbox</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=1074"/>
				<updated>2015-04-22T05:21:44Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: /* SCLY Audio Object */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AGSC uses MusyX data for the audio engine.  Each sound has it's own &amp;quot;SoundMacro&amp;quot; and properties.  The '''pool chunk''' is where the soundmacros are located.  SoundMacros are small scripts that control how sounds are played in game, like pitch or vibrato or fade outs.  Here's a description of the pool chunk:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Header size''' Looks like it's always 10&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Macro size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 2&lt;br /&gt;
| '''Macro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| colspan=2 {{unknown|Macro data, needs more research}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
STRG Commands are similar to CSS syntax.  A ; terminates the command.  &amp;amp; begins the command, so for example, &amp;amp;just=center;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| just  &lt;br /&gt;
| center&lt;br /&gt;
| Justifies text&lt;br /&gt;
|-&lt;br /&gt;
| image&lt;br /&gt;
| SI,0.70,0.68,[[TXTR (File Format)|TXTR]] ID&lt;br /&gt;
| Displays an image.  SI = Single Image? S,T and finally TXTR ID.  Animation = SA, Animation Speed, S,T, TXTR ID, TXTR ID&lt;br /&gt;
|-&lt;br /&gt;
| main-color&lt;br /&gt;
| Hex Color Code&lt;br /&gt;
| Changes color of text.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===SCLY Audio Object===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| '''SCLY Byte''' 0x14 denotes sound&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| N&lt;br /&gt;
| '''Sound name'''; zero-terminated&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sound Effects ID''' index number for [[ATBL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}}; play automatically?&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Maximum Distance (float)'''; the bigger the float, the farther you can hear it! &lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| 4&lt;br /&gt;
| '''Minimum Distance (float)'''; usually set to 0.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| 4&lt;br /&gt;
| '''Padding'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}} Priority?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Max. Volume'''; 127 is loudest&lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| 4&lt;br /&gt;
| '''Min. Volume'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| 4&lt;br /&gt;
| '''Panning''' 0=Left, 64=Center, 127=Right&lt;br /&gt;
|-&lt;br /&gt;
| 0x39&lt;br /&gt;
| 1&lt;br /&gt;
| '''Play endlessly'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| 1&lt;br /&gt;
| '''Play everywhere'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}} active?&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D&lt;br /&gt;
| 1&lt;br /&gt;
| '''Is sound affected by RoomAcoustics?'''; 1=yes, 0=no&lt;br /&gt;
|-&lt;br /&gt;
| colspan=3 {{unknown|Misc data, needs more research}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
so, if what we are assuming are the play automatically bool and the active bool are both on, then the sound plays immediately on spawn and never plays again, even when the trigger is suppose to activate it.&lt;br /&gt;
&lt;br /&gt;
atbl bool = 0, 3rd bool = 1...sound doesn't play automatically but activates when going through trigger.&lt;br /&gt;
&lt;br /&gt;
atbl bool = 1, 3rd bool = 1...sound plays automatically and deactives/activates correctly when going through trigger.&lt;br /&gt;
&lt;br /&gt;
atbl bool = 1, 3rd bool = 0, nothing plays&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center; margin-bottom:20px; float:center; border:1px solid; box-shadow: 0 0 5px #6DBACD; border-radius:6px; border-color:#6dbacd;&amp;quot;  ! width=&amp;quot;45%&amp;quot;&lt;br /&gt;
|[[File:Powercannon_render3.png|200px]]&lt;br /&gt;
|'''Help us research and document!  Join the discussion at: [https://m2k2.taigaforum.com/post/metroid_prime_hacking_research.html Metroid Prime Hacking Research thread @ Metroid2002.com]'''&lt;br /&gt;
{|align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center;&amp;quot;&lt;br /&gt;
|[[File:Morphball_wire.png|50px|link=Category:Major research needed]]&lt;br /&gt;
|[[File:Morphball_wirerender.png|50px|link=Category:Moderate research needed]]&lt;br /&gt;
|[[File:Morphball_render.png|50px|link=Category:Minor research needed]]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Major research needed|'''File formats that need major research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Moderate research needed|'''File formats that need moderate research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Minor research needed|'''File formats that need minor research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=1073</id>
		<title>User:MrSinistar/Sandbox</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=1073"/>
				<updated>2015-04-21T08:09:33Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: /* SCLY Audio Object */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AGSC uses MusyX data for the audio engine.  Each sound has it's own &amp;quot;SoundMacro&amp;quot; and properties.  The '''pool chunk''' is where the soundmacros are located.  SoundMacros are small scripts that control how sounds are played in game, like pitch or vibrato or fade outs.  Here's a description of the pool chunk:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Header size''' Looks like it's always 10&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Macro size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 2&lt;br /&gt;
| '''Macro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| colspan=2 {{unknown|Macro data, needs more research}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
STRG Commands are similar to CSS syntax.  A ; terminates the command.  &amp;amp; begins the command, so for example, &amp;amp;just=center;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| just  &lt;br /&gt;
| center&lt;br /&gt;
| Justifies text&lt;br /&gt;
|-&lt;br /&gt;
| image&lt;br /&gt;
| SI,0.70,0.68,[[TXTR (File Format)|TXTR]] ID&lt;br /&gt;
| Displays an image.  SI = Single Image? S,T and finally TXTR ID.  Animation = SA, Animation Speed, S,T, TXTR ID, TXTR ID&lt;br /&gt;
|-&lt;br /&gt;
| main-color&lt;br /&gt;
| Hex Color Code&lt;br /&gt;
| Changes color of text.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===SCLY Audio Object===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| '''SCLY Byte''' 0x14 denotes sound&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| N&lt;br /&gt;
| '''Sound name'''; zero-terminated&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sound Effects ID''' index number for [[ATBL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}}; Active bool?&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Maximum Distance (float)'''; the bigger the float, the farther you can hear it! &lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| 4&lt;br /&gt;
| '''Minimum Distance (float)'''; usually set to 0.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| 4&lt;br /&gt;
| '''Padding'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}} Priority?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Max. Volume'''; 127 is loudest&lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| 4&lt;br /&gt;
| '''Min. Volume'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| 4&lt;br /&gt;
| '''Panning''' 0=Left, 64=Center, 127=Right&lt;br /&gt;
|-&lt;br /&gt;
| 0x39&lt;br /&gt;
| 1&lt;br /&gt;
| '''Play endlessly'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| 1&lt;br /&gt;
| '''Play everywhere'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D&lt;br /&gt;
| 1&lt;br /&gt;
| '''Is sound affected by RoomAcoustics?'''; 1=yes, 0=no&lt;br /&gt;
|-&lt;br /&gt;
| colspan=3 {{unknown|Misc data, needs more research}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center; margin-bottom:20px; float:center; border:1px solid; box-shadow: 0 0 5px #6DBACD; border-radius:6px; border-color:#6dbacd;&amp;quot;  ! width=&amp;quot;45%&amp;quot;&lt;br /&gt;
|[[File:Powercannon_render3.png|200px]]&lt;br /&gt;
|'''Help us research and document!  Join the discussion at: [https://m2k2.taigaforum.com/post/metroid_prime_hacking_research.html Metroid Prime Hacking Research thread @ Metroid2002.com]'''&lt;br /&gt;
{|align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center;&amp;quot;&lt;br /&gt;
|[[File:Morphball_wire.png|50px|link=Category:Major research needed]]&lt;br /&gt;
|[[File:Morphball_wirerender.png|50px|link=Category:Moderate research needed]]&lt;br /&gt;
|[[File:Morphball_render.png|50px|link=Category:Minor research needed]]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Major research needed|'''File formats that need major research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Moderate research needed|'''File formats that need moderate research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Minor research needed|'''File formats that need minor research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=1072</id>
		<title>User:MrSinistar/Sandbox</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=1072"/>
				<updated>2015-04-21T08:09:04Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: /* SCLY Audio Object */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AGSC uses MusyX data for the audio engine.  Each sound has it's own &amp;quot;SoundMacro&amp;quot; and properties.  The '''pool chunk''' is where the soundmacros are located.  SoundMacros are small scripts that control how sounds are played in game, like pitch or vibrato or fade outs.  Here's a description of the pool chunk:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Header size''' Looks like it's always 10&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Macro size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 2&lt;br /&gt;
| '''Macro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| colspan=2 {{unknown|Macro data, needs more research}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
STRG Commands are similar to CSS syntax.  A ; terminates the command.  &amp;amp; begins the command, so for example, &amp;amp;just=center;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| just  &lt;br /&gt;
| center&lt;br /&gt;
| Justifies text&lt;br /&gt;
|-&lt;br /&gt;
| image&lt;br /&gt;
| SI,0.70,0.68,[[TXTR (File Format)|TXTR]] ID&lt;br /&gt;
| Displays an image.  SI = Single Image? S,T and finally TXTR ID.  Animation = SA, Animation Speed, S,T, TXTR ID, TXTR ID&lt;br /&gt;
|-&lt;br /&gt;
| main-color&lt;br /&gt;
| Hex Color Code&lt;br /&gt;
| Changes color of text.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===SCLY Audio Object===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| '''SCLY Byte''' 0x14 denotes sound&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| N&lt;br /&gt;
| '''Sound name'''; zero-terminated&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sound Effects ID''' index number for [[ATBL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}}; Active bool?&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Maximum Distance (float)'''; the bigger the float, the farther you can hear it! &lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| 4&lt;br /&gt;
| '''Minimum Distance (float)'''; usually set to 0.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| 4&lt;br /&gt;
| '''Padding'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}} Priority?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Max. Volume'''; 127 is loudest&lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| 4&lt;br /&gt;
| '''Min. Volume'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| 4&lt;br /&gt;
| '''Panning''' 0=Left, 64=Center, 127=Right&lt;br /&gt;
|-&lt;br /&gt;
| 0x39&lt;br /&gt;
| 1&lt;br /&gt;
| '''Play endlessly'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| 1&lt;br /&gt;
| '''Play everywhere'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 1&lt;br /&gt;
| '''Is sound affected by RoomAcoustics?'''; 1=yes, 0=no&lt;br /&gt;
|-&lt;br /&gt;
| colspan=3 {{unknown|Misc data, needs more research}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center; margin-bottom:20px; float:center; border:1px solid; box-shadow: 0 0 5px #6DBACD; border-radius:6px; border-color:#6dbacd;&amp;quot;  ! width=&amp;quot;45%&amp;quot;&lt;br /&gt;
|[[File:Powercannon_render3.png|200px]]&lt;br /&gt;
|'''Help us research and document!  Join the discussion at: [https://m2k2.taigaforum.com/post/metroid_prime_hacking_research.html Metroid Prime Hacking Research thread @ Metroid2002.com]'''&lt;br /&gt;
{|align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center;&amp;quot;&lt;br /&gt;
|[[File:Morphball_wire.png|50px|link=Category:Major research needed]]&lt;br /&gt;
|[[File:Morphball_wirerender.png|50px|link=Category:Moderate research needed]]&lt;br /&gt;
|[[File:Morphball_render.png|50px|link=Category:Minor research needed]]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Major research needed|'''File formats that need major research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Moderate research needed|'''File formats that need moderate research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Minor research needed|'''File formats that need minor research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=1071</id>
		<title>User:MrSinistar/Sandbox</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=1071"/>
				<updated>2015-04-21T07:33:28Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: /* SCLY Audio Object */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AGSC uses MusyX data for the audio engine.  Each sound has it's own &amp;quot;SoundMacro&amp;quot; and properties.  The '''pool chunk''' is where the soundmacros are located.  SoundMacros are small scripts that control how sounds are played in game, like pitch or vibrato or fade outs.  Here's a description of the pool chunk:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Header size''' Looks like it's always 10&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Macro size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 2&lt;br /&gt;
| '''Macro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| colspan=2 {{unknown|Macro data, needs more research}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
STRG Commands are similar to CSS syntax.  A ; terminates the command.  &amp;amp; begins the command, so for example, &amp;amp;just=center;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| just  &lt;br /&gt;
| center&lt;br /&gt;
| Justifies text&lt;br /&gt;
|-&lt;br /&gt;
| image&lt;br /&gt;
| SI,0.70,0.68,[[TXTR (File Format)|TXTR]] ID&lt;br /&gt;
| Displays an image.  SI = Single Image? S,T and finally TXTR ID.  Animation = SA, Animation Speed, S,T, TXTR ID, TXTR ID&lt;br /&gt;
|-&lt;br /&gt;
| main-color&lt;br /&gt;
| Hex Color Code&lt;br /&gt;
| Changes color of text.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===SCLY Audio Object===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| '''SCLY Byte''' 0x14 denotes sound&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| N&lt;br /&gt;
| '''Sound name'''; zero-terminated&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sound Effects ID''' index number for [[ATBL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}}; Active bool?&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Maximum Distance (float)'''; the bigger the float, the farther you can hear it! &lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| 4&lt;br /&gt;
| '''Minimum Distance (float)'''; usually set to 0.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| 4&lt;br /&gt;
| '''Padding'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}} Priority?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Max. Volume'''; 127 is loudest&lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| 4&lt;br /&gt;
| '''Min. Volume'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| 4&lt;br /&gt;
| '''Panning''' 0=Left, 64=Center, 127=Right&lt;br /&gt;
|-&lt;br /&gt;
| 0x39&lt;br /&gt;
| 1&lt;br /&gt;
| '''Play endlessly'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| 1&lt;br /&gt;
| '''Play everywhere'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 1&lt;br /&gt;
| '''Is sound affected by RoomAcoustics?'''; 1=yes, 0=no&lt;br /&gt;
|-&lt;br /&gt;
| colspan=3 {{unknown|Misc data, needs more research}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center; margin-bottom:20px; float:center; border:1px solid; box-shadow: 0 0 5px #6DBACD; border-radius:6px; border-color:#6dbacd;&amp;quot;  ! width=&amp;quot;45%&amp;quot;&lt;br /&gt;
|[[File:Powercannon_render3.png|200px]]&lt;br /&gt;
|'''Help us research and document!  Join the discussion at: [https://m2k2.taigaforum.com/post/metroid_prime_hacking_research.html Metroid Prime Hacking Research thread @ Metroid2002.com]'''&lt;br /&gt;
{|align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center;&amp;quot;&lt;br /&gt;
|[[File:Morphball_wire.png|50px|link=Category:Major research needed]]&lt;br /&gt;
|[[File:Morphball_wirerender.png|50px|link=Category:Moderate research needed]]&lt;br /&gt;
|[[File:Morphball_render.png|50px|link=Category:Minor research needed]]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Major research needed|'''File formats that need major research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Moderate research needed|'''File formats that need moderate research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Minor research needed|'''File formats that need minor research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=1070</id>
		<title>User:MrSinistar/Sandbox</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=1070"/>
				<updated>2015-04-21T07:16:55Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: /* SCLY Audio Object */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AGSC uses MusyX data for the audio engine.  Each sound has it's own &amp;quot;SoundMacro&amp;quot; and properties.  The '''pool chunk''' is where the soundmacros are located.  SoundMacros are small scripts that control how sounds are played in game, like pitch or vibrato or fade outs.  Here's a description of the pool chunk:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Header size''' Looks like it's always 10&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Macro size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 2&lt;br /&gt;
| '''Macro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| colspan=2 {{unknown|Macro data, needs more research}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
STRG Commands are similar to CSS syntax.  A ; terminates the command.  &amp;amp; begins the command, so for example, &amp;amp;just=center;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| just  &lt;br /&gt;
| center&lt;br /&gt;
| Justifies text&lt;br /&gt;
|-&lt;br /&gt;
| image&lt;br /&gt;
| SI,0.70,0.68,[[TXTR (File Format)|TXTR]] ID&lt;br /&gt;
| Displays an image.  SI = Single Image? S,T and finally TXTR ID.  Animation = SA, Animation Speed, S,T, TXTR ID, TXTR ID&lt;br /&gt;
|-&lt;br /&gt;
| main-color&lt;br /&gt;
| Hex Color Code&lt;br /&gt;
| Changes color of text.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===SCLY Audio Object===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| '''SCLY Byte''' 0x14 denotes sound&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| N&lt;br /&gt;
| '''Sound name'''; zero-terminated&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sound Effects ID''' index number for [[ATBL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}}; Active bool?&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Maximum Distance (float)'''; the bigger the float, the farther you can hear it! &lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| 4&lt;br /&gt;
| '''Minimum Distance (float)'''; usually set to 0.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| 4&lt;br /&gt;
| '''Padding'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}} Priority?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Max. Volume'''; 127 is loudest&lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| 4&lt;br /&gt;
| '''Min. Volume'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| 4&lt;br /&gt;
| '''Panning''' 0=Left, 64=Center, 127=Right&lt;br /&gt;
|-&lt;br /&gt;
| 0x39&lt;br /&gt;
| 1&lt;br /&gt;
| '''Play endlessly'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 1&lt;br /&gt;
| '''Is sound affected by RoomAcoustics?'''; 1=yes, 0=no&lt;br /&gt;
|-&lt;br /&gt;
| colspan=3 {{unknown|Misc data, needs more research}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center; margin-bottom:20px; float:center; border:1px solid; box-shadow: 0 0 5px #6DBACD; border-radius:6px; border-color:#6dbacd;&amp;quot;  ! width=&amp;quot;45%&amp;quot;&lt;br /&gt;
|[[File:Powercannon_render3.png|200px]]&lt;br /&gt;
|'''Help us research and document!  Join the discussion at: [https://m2k2.taigaforum.com/post/metroid_prime_hacking_research.html Metroid Prime Hacking Research thread @ Metroid2002.com]'''&lt;br /&gt;
{|align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center;&amp;quot;&lt;br /&gt;
|[[File:Morphball_wire.png|50px|link=Category:Major research needed]]&lt;br /&gt;
|[[File:Morphball_wirerender.png|50px|link=Category:Moderate research needed]]&lt;br /&gt;
|[[File:Morphball_render.png|50px|link=Category:Minor research needed]]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Major research needed|'''File formats that need major research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Moderate research needed|'''File formats that need moderate research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Minor research needed|'''File formats that need minor research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=1069</id>
		<title>User:MrSinistar/Sandbox</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=1069"/>
				<updated>2015-04-20T05:29:07Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: /* SCLY Audio Object */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AGSC uses MusyX data for the audio engine.  Each sound has it's own &amp;quot;SoundMacro&amp;quot; and properties.  The '''pool chunk''' is where the soundmacros are located.  SoundMacros are small scripts that control how sounds are played in game, like pitch or vibrato or fade outs.  Here's a description of the pool chunk:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Header size''' Looks like it's always 10&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Macro size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 2&lt;br /&gt;
| '''Macro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| colspan=2 {{unknown|Macro data, needs more research}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
STRG Commands are similar to CSS syntax.  A ; terminates the command.  &amp;amp; begins the command, so for example, &amp;amp;just=center;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| just  &lt;br /&gt;
| center&lt;br /&gt;
| Justifies text&lt;br /&gt;
|-&lt;br /&gt;
| image&lt;br /&gt;
| SI,0.70,0.68,[[TXTR (File Format)|TXTR]] ID&lt;br /&gt;
| Displays an image.  SI = Single Image? S,T and finally TXTR ID.  Animation = SA, Animation Speed, S,T, TXTR ID, TXTR ID&lt;br /&gt;
|-&lt;br /&gt;
| main-color&lt;br /&gt;
| Hex Color Code&lt;br /&gt;
| Changes color of text.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===SCLY Audio Object===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| '''SCLY Byte''' 0x14 denotes sound&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| N&lt;br /&gt;
| '''Sound name'''; zero-terminated&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''Position (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Rotation (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sound Effects ID''' index number for [[ATBL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}}; can mute sound sometimes like on &amp;quot;Into Hud&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Maximum Distance (float)'''; the bigger the float, the farther you can hear it! &lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| 4&lt;br /&gt;
| '''Minimum Distance (float)'''; usually set to 0.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| 4&lt;br /&gt;
| '''Padding'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}} Priority?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Max. Volume'''; 127 is loudest&lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| 4&lt;br /&gt;
| '''Min. Volume'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| 4&lt;br /&gt;
| '''Panning''' 0=Left, 64=Center, 127=Right&lt;br /&gt;
|-&lt;br /&gt;
| 0x39&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}}; play automatically flag?&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B&lt;br /&gt;
| 1&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 1&lt;br /&gt;
| '''Is sound affected by RoomAcoustics?'''; 1=yes, 0=no&lt;br /&gt;
|-&lt;br /&gt;
| colspan=3 {{unknown|Misc data, needs more research}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center; margin-bottom:20px; float:center; border:1px solid; box-shadow: 0 0 5px #6DBACD; border-radius:6px; border-color:#6dbacd;&amp;quot;  ! width=&amp;quot;45%&amp;quot;&lt;br /&gt;
|[[File:Powercannon_render3.png|200px]]&lt;br /&gt;
|'''Help us research and document!  Join the discussion at: [https://m2k2.taigaforum.com/post/metroid_prime_hacking_research.html Metroid Prime Hacking Research thread @ Metroid2002.com]'''&lt;br /&gt;
{|align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center;&amp;quot;&lt;br /&gt;
|[[File:Morphball_wire.png|50px|link=Category:Major research needed]]&lt;br /&gt;
|[[File:Morphball_wirerender.png|50px|link=Category:Moderate research needed]]&lt;br /&gt;
|[[File:Morphball_render.png|50px|link=Category:Minor research needed]]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Major research needed|'''File formats that need major research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Moderate research needed|'''File formats that need moderate research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Minor research needed|'''File formats that need minor research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=1062</id>
		<title>User:MrSinistar/Sandbox</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=1062"/>
				<updated>2015-04-15T07:22:27Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: /* SCLY Audio Object */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AGSC uses MusyX data for the audio engine.  Each sound has it's own &amp;quot;SoundMacro&amp;quot; and properties.  The '''pool chunk''' is where the soundmacros are located.  SoundMacros are small scripts that control how sounds are played in game, like pitch or vibrato or fade outs.  Here's a description of the pool chunk:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Header size''' Looks like it's always 10&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Macro size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 2&lt;br /&gt;
| '''Macro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| colspan=2 {{unknown|Macro data, needs more research}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
STRG Commands are similar to CSS syntax.  A ; terminates the command.  &amp;amp; begins the command, so for example, &amp;amp;just=center;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| just  &lt;br /&gt;
| center&lt;br /&gt;
| Justifies text&lt;br /&gt;
|-&lt;br /&gt;
| image&lt;br /&gt;
| SI,0.70,0.68,[[TXTR (File Format)|TXTR]] ID&lt;br /&gt;
| Displays an image.  SI = Single Image? S,T and finally TXTR ID.  Animation = SA, Animation Speed, S,T, TXTR ID, TXTR ID&lt;br /&gt;
|-&lt;br /&gt;
| main-color&lt;br /&gt;
| Hex Color Code&lt;br /&gt;
| Changes color of text.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===SCLY Audio Object===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| '''SCLY Byte''' 0x14 denotes sound&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| N&lt;br /&gt;
| '''Sound name'''; zero-terminated&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Maximum Distance (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Maximum Volume (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''Minimum Volume (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Volume Push (float)''' 0.0 = linear -&amp;gt; 1.0 = square&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Group ID''' (by default FXID / 0x80000000) used to do volume priorities for continous emitters&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 6&lt;br /&gt;
| {{unknown|'''Padding?'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A (tested)&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sound Effects ID''' index number for [[ATBL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B (tested)&lt;br /&gt;
| 1&lt;br /&gt;
| '''Studio ?'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 2&lt;br /&gt;
| '''Volume Level Control''' Used during continous emitter allocation process&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Padding?'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| 4&lt;br /&gt;
| '''Fade''' Used to fade-in of continous emitters&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 (tested)&lt;br /&gt;
| 4&lt;br /&gt;
| '''Panning''' 0=Left, 64=Center, 127=Right&lt;br /&gt;
|-&lt;br /&gt;
| 0x&lt;br /&gt;
| colspan=2 {{unknown|Misc data, needs more research}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center; margin-bottom:20px; float:center; border:1px solid; box-shadow: 0 0 5px #6DBACD; border-radius:6px; border-color:#6dbacd;&amp;quot;  ! width=&amp;quot;45%&amp;quot;&lt;br /&gt;
|[[File:Powercannon_render3.png|200px]]&lt;br /&gt;
|'''Help us research and document!  Join the discussion at: [https://m2k2.taigaforum.com/post/metroid_prime_hacking_research.html Metroid Prime Hacking Research thread @ Metroid2002.com]'''&lt;br /&gt;
{|align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center;&amp;quot;&lt;br /&gt;
|[[File:Morphball_wire.png|50px|link=Category:Major research needed]]&lt;br /&gt;
|[[File:Morphball_wirerender.png|50px|link=Category:Moderate research needed]]&lt;br /&gt;
|[[File:Morphball_render.png|50px|link=Category:Minor research needed]]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Major research needed|'''File formats that need major research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Moderate research needed|'''File formats that need moderate research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Minor research needed|'''File formats that need minor research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=1061</id>
		<title>User:MrSinistar/Sandbox</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=1061"/>
				<updated>2015-04-15T07:20:06Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AGSC uses MusyX data for the audio engine.  Each sound has it's own &amp;quot;SoundMacro&amp;quot; and properties.  The '''pool chunk''' is where the soundmacros are located.  SoundMacros are small scripts that control how sounds are played in game, like pitch or vibrato or fade outs.  Here's a description of the pool chunk:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Header size''' Looks like it's always 10&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Macro size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 2&lt;br /&gt;
| '''Macro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| colspan=2 {{unknown|Macro data, needs more research}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
STRG Commands are similar to CSS syntax.  A ; terminates the command.  &amp;amp; begins the command, so for example, &amp;amp;just=center;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| just  &lt;br /&gt;
| center&lt;br /&gt;
| Justifies text&lt;br /&gt;
|-&lt;br /&gt;
| image&lt;br /&gt;
| SI,0.70,0.68,[[TXTR (File Format)|TXTR]] ID&lt;br /&gt;
| Displays an image.  SI = Single Image? S,T and finally TXTR ID.  Animation = SA, Animation Speed, S,T, TXTR ID, TXTR ID&lt;br /&gt;
|-&lt;br /&gt;
| main-color&lt;br /&gt;
| Hex Color Code&lt;br /&gt;
| Changes color of text.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===SCLY Audio Object===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| '''SCLY Byte''' 0x14 denotes sound&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| N&lt;br /&gt;
| '''Sound name'''; zero-terminated&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Maximum Distance (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Maximum Volume (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''Minimum Volume (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Volume Push (float)''' 0.0 = linear -&amp;gt; 1.0 = square&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Group ID''' (by default FXID / 0x80000000) used to do volume priorities for continous emitters&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 6&lt;br /&gt;
| {{unknown|'''Padding?'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sound Effects ID''' index number for [[ATBL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B&lt;br /&gt;
| 1&lt;br /&gt;
| '''Studio'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 2&lt;br /&gt;
| '''Volume Level Control''' Used during continous emitter allocation process&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Padding?'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| 4&lt;br /&gt;
| '''Fade''' Used to fade-in of continous emitters&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| 4&lt;br /&gt;
| '''Panning''' 0=Left, 64=Center, 127=Right&lt;br /&gt;
|-&lt;br /&gt;
| 0x&lt;br /&gt;
| colspan=2 {{unknown|Misc data, needs more research}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center; margin-bottom:20px; float:center; border:1px solid; box-shadow: 0 0 5px #6DBACD; border-radius:6px; border-color:#6dbacd;&amp;quot;  ! width=&amp;quot;45%&amp;quot;&lt;br /&gt;
|[[File:Powercannon_render3.png|200px]]&lt;br /&gt;
|'''Help us research and document!  Join the discussion at: [https://m2k2.taigaforum.com/post/metroid_prime_hacking_research.html Metroid Prime Hacking Research thread @ Metroid2002.com]'''&lt;br /&gt;
{|align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center;&amp;quot;&lt;br /&gt;
|[[File:Morphball_wire.png|50px|link=Category:Major research needed]]&lt;br /&gt;
|[[File:Morphball_wirerender.png|50px|link=Category:Moderate research needed]]&lt;br /&gt;
|[[File:Morphball_render.png|50px|link=Category:Minor research needed]]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Major research needed|'''File formats that need major research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Moderate research needed|'''File formats that need moderate research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Minor research needed|'''File formats that need minor research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=1060</id>
		<title>User:MrSinistar/Sandbox</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=1060"/>
				<updated>2015-04-15T07:18:53Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AGSC uses MusyX data for the audio engine.  Each sound has it's own &amp;quot;SoundMacro&amp;quot; and properties.  The '''pool chunk''' is where the soundmacros are located.  SoundMacros are small scripts that control how sounds are played in game, like pitch or vibrato or fade outs.  Here's a description of the pool chunk:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Header size''' Looks like it's always 10&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Macro size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 2&lt;br /&gt;
| '''Macro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| colspan=2 {{unknown|Macro data, needs more research}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
STRG Commands are similar to CSS syntax.  A ; terminates the command.  &amp;amp; begins the command, so for example, &amp;amp;just=center;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| just  &lt;br /&gt;
| center&lt;br /&gt;
| Justifies text&lt;br /&gt;
|-&lt;br /&gt;
| image&lt;br /&gt;
| SI,0.70,0.68,[[TXTR (File Format)|TXTR]] ID&lt;br /&gt;
| Displays an image.  SI = Single Image? S,T and finally TXTR ID.  Animation = SA, Animation Speed, S,T, TXTR ID, TXTR ID&lt;br /&gt;
|-&lt;br /&gt;
| main-color&lt;br /&gt;
| Hex Color Code&lt;br /&gt;
| Changes color of text.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===SCLY Audio Object===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| '''SCLY Byte''' 0x14 denotes sound&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| N&lt;br /&gt;
| '''Sound name'''; zero-terminated&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Maximum Distance (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Maximum Volume (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''Minimum Volume (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Volume Push (float)''' 0.0 = linear -&amp;gt; 1.0 = square&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Group ID''' (by default FXID / 0x80000000) used to do volume priorities for continous emitters&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 6&lt;br /&gt;
| {{unknown|'''Padding?'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sound Effects ID''' index number for [[ATBL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B&lt;br /&gt;
| 1&lt;br /&gt;
| '''Studio'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 2&lt;br /&gt;
| '''Volume Level Control''' Used during continous emitter allocation process&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Padding?'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| 4&lt;br /&gt;
| '''Fade''' Used to fade-in of continous emitters&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| 4&lt;br /&gt;
| '''Panning''' 0=Left, 64=Center, 127=Right&lt;br /&gt;
| 0x25&lt;br /&gt;
| colspan=2 {{unknown|Misc data, needs more research}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center; margin-bottom:20px; float:center; border:1px solid; box-shadow: 0 0 5px #6DBACD; border-radius:6px; border-color:#6dbacd;&amp;quot;  ! width=&amp;quot;45%&amp;quot;&lt;br /&gt;
|[[File:Powercannon_render3.png|200px]]&lt;br /&gt;
|'''Help us research and document!  Join the discussion at: [https://m2k2.taigaforum.com/post/metroid_prime_hacking_research.html Metroid Prime Hacking Research thread @ Metroid2002.com]'''&lt;br /&gt;
{|align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center;&amp;quot;&lt;br /&gt;
|[[File:Morphball_wire.png|50px|link=Category:Major research needed]]&lt;br /&gt;
|[[File:Morphball_wirerender.png|50px|link=Category:Moderate research needed]]&lt;br /&gt;
|[[File:Morphball_render.png|50px|link=Category:Minor research needed]]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Major research needed|'''File formats that need major research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Moderate research needed|'''File formats that need moderate research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Minor research needed|'''File formats that need minor research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=1059</id>
		<title>User:MrSinistar/Sandbox</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=1059"/>
				<updated>2015-04-15T06:08:21Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AGSC uses MusyX data for the audio engine.  Each sound has it's own &amp;quot;SoundMacro&amp;quot; and properties.  The '''pool chunk''' is where the soundmacros are located.  SoundMacros are small scripts that control how sounds are played in game, like pitch or vibrato or fade outs.  Here's a description of the pool chunk:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Header size''' Looks like it's always 10&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Macro size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 2&lt;br /&gt;
| '''Macro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| colspan=2 {{unknown|Macro data, needs more research}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
STRG Commands are similar to CSS syntax.  A ; terminates the command.  &amp;amp; begins the command, so for example, &amp;amp;just=center;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| just  &lt;br /&gt;
| center&lt;br /&gt;
| Justifies text&lt;br /&gt;
|-&lt;br /&gt;
| image&lt;br /&gt;
| SI,0.70,0.68,[[TXTR (File Format)|TXTR]] ID&lt;br /&gt;
| Displays an image.  SI = Single Image? S,T and finally TXTR ID.  Animation = SA, Animation Speed, S,T, TXTR ID, TXTR ID&lt;br /&gt;
|-&lt;br /&gt;
| main-color&lt;br /&gt;
| Hex Color Code&lt;br /&gt;
| Changes color of text.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
===SCLY Audio Object===&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| '''SCLY Byte''' 0x14 denotes sound&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| N&lt;br /&gt;
| '''Sound name'''; zero-terminated&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Maximum Distance (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Maximum Volume (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''Minimum Volume (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Volume Push (float)''' 0.0 = linear -&amp;gt; 1.0 = square&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Group ID''' (by default FXID / 0x80000000) used to do volume priorities for continous emitters&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 6&lt;br /&gt;
| {{unknown|'''Padding?'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sound Effects ID''' index number for [[ATBL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B&lt;br /&gt;
| 1&lt;br /&gt;
| '''Studio'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 2&lt;br /&gt;
| '''Volume Level Control''' Used during continous emitter allocation process&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Padding?'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| 4&lt;br /&gt;
| '''Fade''' Used to fade-in of continous emitters&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| colspan=2 {{unknown|Misc data, needs more research}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center; margin-bottom:20px; float:center; border:1px solid; box-shadow: 0 0 5px #6DBACD; border-radius:6px; border-color:#6dbacd;&amp;quot;  ! width=&amp;quot;45%&amp;quot;&lt;br /&gt;
|[[File:Powercannon_render3.png|200px]]&lt;br /&gt;
|'''Help us research and document!  Join the discussion at: [https://m2k2.taigaforum.com/post/metroid_prime_hacking_research.html Metroid Prime Hacking Research thread @ Metroid2002.com]'''&lt;br /&gt;
{|align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center;&amp;quot;&lt;br /&gt;
|[[File:Morphball_wire.png|50px|link=Category:Major research needed]]&lt;br /&gt;
|[[File:Morphball_wirerender.png|50px|link=Category:Moderate research needed]]&lt;br /&gt;
|[[File:Morphball_render.png|50px|link=Category:Minor research needed]]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Major research needed|'''File formats that need major research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Moderate research needed|'''File formats that need moderate research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Minor research needed|'''File formats that need minor research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=1058</id>
		<title>User:MrSinistar/Sandbox</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=1058"/>
				<updated>2015-04-15T06:05:47Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AGSC uses MusyX data for the audio engine.  Each sound has it's own &amp;quot;SoundMacro&amp;quot; and properties.  The '''pool chunk''' is where the soundmacros are located.  SoundMacros are small scripts that control how sounds are played in game, like pitch or vibrato or fade outs.  Here's a description of the pool chunk:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Header size''' Looks like it's always 10&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Macro size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 2&lt;br /&gt;
| '''Macro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| colspan=2 {{unknown|Macro data, needs more research}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
STRG Commands are similar to CSS syntax.  A ; terminates the command.  &amp;amp; begins the command, so for example, &amp;amp;just=center;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| just  &lt;br /&gt;
| center&lt;br /&gt;
| Justifies text&lt;br /&gt;
|-&lt;br /&gt;
| image&lt;br /&gt;
| SI,0.70,0.68,[[TXTR (File Format)|TXTR]] ID&lt;br /&gt;
| Displays an image.  SI = Single Image? S,T and finally TXTR ID.  Animation = SA, Animation Speed, S,T, TXTR ID, TXTR ID&lt;br /&gt;
|-&lt;br /&gt;
| main-color&lt;br /&gt;
| Hex Color Code&lt;br /&gt;
| Changes color of text.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| '''SCLY Byte''' 0x14 denotes sound&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| N&lt;br /&gt;
| '''Sound name'''; zero-terminated&lt;br /&gt;
|}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Maximum Distance (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Maximum Volume (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''Minimum Volume (float)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Volume Push (float)''' 0.0 = linear -&amp;gt; 1.0 = square&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Group''' Group ID (by default FXID | 0x80000000) used to do volume priorities for continous emitters&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 6&lt;br /&gt;
| {{unknown|'''Padding?'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sound Effects ID''' index number for [[ATBL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B&lt;br /&gt;
| 1&lt;br /&gt;
| '''Studio''' index number for [[ATBL]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 2&lt;br /&gt;
| '''Volume Level Control''' Used during continous emitter allocation process&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Padding?'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| 4&lt;br /&gt;
| '''Fade''' Used to fade-in of continous emitters&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| colspan=2 {{unknown|Misc data, needs more research}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center; margin-bottom:20px; float:center; border:1px solid; box-shadow: 0 0 5px #6DBACD; border-radius:6px; border-color:#6dbacd;&amp;quot;  ! width=&amp;quot;45%&amp;quot;&lt;br /&gt;
|[[File:Powercannon_render3.png|200px]]&lt;br /&gt;
|'''Help us research and document!  Join the discussion at: [https://m2k2.taigaforum.com/post/metroid_prime_hacking_research.html Metroid Prime Hacking Research thread @ Metroid2002.com]'''&lt;br /&gt;
{|align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center;&amp;quot;&lt;br /&gt;
|[[File:Morphball_wire.png|50px|link=Category:Major research needed]]&lt;br /&gt;
|[[File:Morphball_wirerender.png|50px|link=Category:Moderate research needed]]&lt;br /&gt;
|[[File:Morphball_render.png|50px|link=Category:Minor research needed]]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Major research needed|'''File formats that need major research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Moderate research needed|'''File formats that need moderate research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Minor research needed|'''File formats that need minor research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=AGSC_(File_Format)&amp;diff=995</id>
		<title>AGSC (File Format)</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=AGSC_(File_Format)&amp;diff=995"/>
				<updated>2015-03-31T04:18:25Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: /* Project */ Figured out new unknown&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''AGSC''' is the sound effect format for Metroid Prime and Metroid Prime 2: Echoes. Each AGSC file contains a group of sound effects. The first two Metroid Prime games utilize the MusyX audio engine created by Factor5 and as a result, AGSC files are essentially just embedded MusyX files. &lt;br /&gt;
&lt;br /&gt;
The audio codec used in AGSC is the standard GameCube DSP ADPCM codec.  &lt;br /&gt;
&lt;br /&gt;
{{todo|Better descriptions for how SoundMacros work and a description for what each command does.}}&lt;br /&gt;
{{research|minor|The proj and sdir chunks have a couple unknowns left.}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The AGSC format is essentially four data chunks combined into one resource, each of which is a standard MusyX file. Of the four data chunks (pool, proj, samp, and sdir), there's one for sound engine scripts, one for sound properties, one for actual ADPCM sound data, and one for sound metadata. The main difference between Prime 1 and 2 is the header, and some slight changes in the way the four chunks are organized. In Metroid Prime, each chunk begins with its own size value; in Metroid Prime 2, every chunk instead has its size listed at the beginning of the file, at the end of the header. In addition, in Metroid Prime, the third chunk is samp, and the fourth is sdir; in Metroid Prime 2, it's the other way around.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
==== Metroid Prime ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| '''D'''&lt;br /&gt;
| '''Audio Directory'''. Always &amp;quot;Audio/.&amp;quot; Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 + D&lt;br /&gt;
| '''N'''&lt;br /&gt;
| '''Audio Group Name'''. Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 + D + N&lt;br /&gt;
|colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Metroid Prime 2 ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''; always 1}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| D&lt;br /&gt;
| '''Audio Group Name'''. Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 + D&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|Copy of '''first project unknown'''; 0xffff if empty}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Pool size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xA + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Project size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xE + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample directory size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 + D&lt;br /&gt;
| colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pool ===&lt;br /&gt;
&lt;br /&gt;
The Pool chunk contains tables for SoundMacros, ADSR, keymaps, and layers, if applicable. It starts with a 16-byte header before the different data tables begin.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacros Offset''' (always 0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Tables Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''Keymaps Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Layers Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SoundMacros ====&lt;br /&gt;
&lt;br /&gt;
The first Pool table denotes MusyX's '''SoundMacros''', small scripts that apply various effects on the sounds in the game.  Each macro is composed of a header followed by a number of commands; each command specifies its type through a single-byte command ID, then specifies the parameters of that particular command, which vary.&lt;br /&gt;
&lt;br /&gt;
The header of each SoundMacro is eight bytes, and is structured as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacro size''' ''(note: includes the size value itself)''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''SoundMacro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''; usually 0}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| colspan=2 {{unknown|Commands begin}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
On the commands, each 4 bytes were originally little endian, but have been swapped to big endian in the AGSC files (despite not being longs). To read the data as originally formatted, every four bytes needs to be byte-swapped. Each command is 8 bytes, and is structured as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| '''Command ID''' (varies; there are 79 known commands in the MusyX audio engine.)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 7&lt;br /&gt;
| '''Command arguments''' (varies between commands)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The SoundMacro will continue with commands until it terminates when the END command is executed.  The command ID for END is 0 and has null command arguments; the next SoundMacro begins after reading it. &lt;br /&gt;
&lt;br /&gt;
These are the possible commands:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! width=&amp;quot;2%&amp;quot; | ID&lt;br /&gt;
! width=&amp;quot;7%&amp;quot; | Name&lt;br /&gt;
! colspan=&amp;quot;91%&amp;quot; | Arguments&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| STOP&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| SPLITKEY&lt;br /&gt;
| Keynumber&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| SPLITVEL&lt;br /&gt;
| Velocity&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| WAIT_TICKS&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sampleend&lt;br /&gt;
| Absolute&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| LOOP&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sampleend&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Times&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| GOTO&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| WAIT_MS&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sample end&lt;br /&gt;
| Absolute&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| PLAYMACRO&lt;br /&gt;
| Addnote&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| Priority&lt;br /&gt;
| MaxVoices&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| SENDKEYOFF&lt;br /&gt;
| Variable&lt;br /&gt;
| Last started&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| SPLITMOD&lt;br /&gt;
| Mod value&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| PIANOPAN&lt;br /&gt;
| Scale&lt;br /&gt;
| Centerkey&lt;br /&gt;
| Centerpan&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| SETADSR&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (ADSR)&lt;br /&gt;
| DLS mode&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| SCALEVOLUME&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| PANNING&lt;br /&gt;
| Pan position&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Time ms&lt;br /&gt;
| Width&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| ENVELOPE&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| STARTSAMPLE&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Sample-ID&lt;br /&gt;
| Mode&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x11&lt;br /&gt;
| STOPSAMPLE&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| KEYOFF&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x13&lt;br /&gt;
| SPLITRND&lt;br /&gt;
| RND&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| FADE-IN&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| SPANNING&lt;br /&gt;
| Pan position&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Time ms&lt;br /&gt;
| Width&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| SETADSRCTRL&lt;br /&gt;
| Attack&lt;br /&gt;
| Decay&lt;br /&gt;
| Sustain&lt;br /&gt;
| Relase&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| RNDNOTE&lt;br /&gt;
| Note Lo&lt;br /&gt;
| Detune&lt;br /&gt;
| Note Hi&lt;br /&gt;
| Fixed/Free&lt;br /&gt;
| Abs/Rel&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| ADDNOTE&lt;br /&gt;
| Add&lt;br /&gt;
| Detune&lt;br /&gt;
| org key&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| SETNOTE&lt;br /&gt;
| Key&lt;br /&gt;
| Detune&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| LASTNOTE&lt;br /&gt;
| Add&lt;br /&gt;
| detune&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B&lt;br /&gt;
| PORTAMENTO&lt;br /&gt;
| Port. State&lt;br /&gt;
| Port. Type&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| VIBRATO&lt;br /&gt;
| Level note&lt;br /&gt;
| Level fine&lt;br /&gt;
| Modwheel flag&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| PITCHSWEEP1&lt;br /&gt;
| Times&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| PITCHSWEEP2&lt;br /&gt;
| Times&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| SETPITCH&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | Frequency (Hz)&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Fine&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| SETPITCHADSR&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (ADSR)&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| Note range&lt;br /&gt;
| Detune range&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| SCALEVOLUME DLS&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scale&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| MOD2VIBRANGE&lt;br /&gt;
| Key range&lt;br /&gt;
| Cent range&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x23&lt;br /&gt;
| SETUP TREMOLO&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Tremolo scale&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Modw. add scale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| RETURN&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| GOSUB&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| TRAP_EVENT&lt;br /&gt;
| Event&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| SEND_MESSAGE&lt;br /&gt;
| IsVar&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Macro&lt;br /&gt;
| VID&lt;br /&gt;
| Varibale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| GET_MESSAGE&lt;br /&gt;
| Varibale&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B&lt;br /&gt;
| GET_VID&lt;br /&gt;
| Varibale&lt;br /&gt;
| PLAY_MACRO&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| ADDAGECOUNT&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| SETAGECOUNT&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Counter&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| SENDFLAG&lt;br /&gt;
| Flag-ID&lt;br /&gt;
| Value&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| PITCHWHEELR&lt;br /&gt;
| Range up&lt;br /&gt;
| Range down&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| SETPRIORITY&lt;br /&gt;
| Prio&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| ADDPRIORITY&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| AGECNTSPEED&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | Time&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| AGECNTVEL&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | AGE Base&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | AGE Scale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| VOL_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| PAN_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| PitchW_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x43&lt;br /&gt;
| ModW_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| PEDAL_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x45&lt;br /&gt;
| PORTA_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| REVERB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x47&lt;br /&gt;
| SPAN_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| DOPPLER_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x49&lt;br /&gt;
| TREMOLO_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| PREA_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B&lt;br /&gt;
| PREB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| POSTB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4D&lt;br /&gt;
| AUXAFX_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| AUXBFX_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| SETUP_LFO&lt;br /&gt;
| LFO Nr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Period in ms&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| MODE_SELECT&lt;br /&gt;
| DLS vol&lt;br /&gt;
| ITD&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x59&lt;br /&gt;
| SET_KEYGROUP&lt;br /&gt;
| group&lt;br /&gt;
| kill&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A&lt;br /&gt;
| SRCMODE_SELECT&lt;br /&gt;
| SRC type&lt;br /&gt;
| Type 0 SRC filter&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| ADD_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B +&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x61&lt;br /&gt;
| SUB_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B -&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x62&lt;br /&gt;
| MUL_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B *&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x63&lt;br /&gt;
| DIV_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B /&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| ADDI_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B +&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Immediate&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| IF_EQUAL&lt;br /&gt;
| Ctrl&lt;br /&gt;
| A ==&lt;br /&gt;
| Ctrl&lt;br /&gt;
| B&lt;br /&gt;
| Not&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro Step&lt;br /&gt;
|-&lt;br /&gt;
| 0x71&lt;br /&gt;
| IF_LESS&lt;br /&gt;
| Ctrl&lt;br /&gt;
| A &amp;lt;&lt;br /&gt;
| Ctrl&lt;br /&gt;
| B&lt;br /&gt;
| Not&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro Step&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| END&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After the last soundmacro, the table terminated by a value of 0xFFFF.&lt;br /&gt;
&lt;br /&gt;
==== Tables ====&lt;br /&gt;
&lt;br /&gt;
'''Tables''' have two functions: for defining curves for volume scaling, or to be used as ADSR envelopes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Table size'''; (usually 0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''Table ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}; (always 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 1&lt;br /&gt;
| '''Attack time (0-255 milliseconds)'''; no multiplication is done to the value&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| 1&lt;br /&gt;
| '''Attack time (0-65280 milliseconds)'''; multiply value by 256&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| 1&lt;br /&gt;
| '''Decay time (0-255 milliseconds)''';  no multiplication is done to the value&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| 1&lt;br /&gt;
| '''Decay time (0-65280 milliseconds)'''; multiply value by 256&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 1&lt;br /&gt;
| '''Sustain (percentage)'''; multiply value by 0.0244&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 1&lt;br /&gt;
| '''Sustain (percentage)'''; multiply value by 6.25&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 1&lt;br /&gt;
| '''Release time (0-255 milliseconds)''';  no multiplication is done to the value&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| 1&lt;br /&gt;
| '''Release time (0-65280 milliseconds)'''; multiply value by 256&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The entire Pool chunk is terminated by a value of 0xFFFF.&lt;br /&gt;
&lt;br /&gt;
=== Project ===&lt;br /&gt;
&lt;br /&gt;
The Project properties chunk contains values for the sounds, including priority, polyphony, volume, etc.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Proj chunk size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''Group ID'''; 0 for SongGroup (for use with [[CSNG (File Format)|CSNG]]), 1 for SFXGroup.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacro ID table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample ID table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Tables table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Keymaps table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Layers table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacro Settings Table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| '''Unknown Table D offset''' ''(usually 0, indicating table is not present)''&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4&lt;br /&gt;
| '''Unknown Table E offset''' ''(usually 0, indicating table is not present)''&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| colspan=2 {{unknown|End of proj header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After the header are a number of data tables. &lt;br /&gt;
&lt;br /&gt;
==== SoundMacro ID Table ====&lt;br /&gt;
&lt;br /&gt;
This is a table of shorts; there's no count value, so it's terminated with a value of 0xFFFF. It's a list of SoundMacro IDs present in the file. Occasionally there's gaps in the list; these gaps are signified by the top bit, 0x8000, being set on the size value preceding the gap.&lt;br /&gt;
&lt;br /&gt;
==== Sample ID Table ====&lt;br /&gt;
&lt;br /&gt;
This functions the same way as the SoundMacro ID table, but it contains a list sample IDs instead.&lt;br /&gt;
&lt;br /&gt;
==== SoundMacro Settings ====&lt;br /&gt;
&lt;br /&gt;
This table begins with a 16-bit count value, then 16 bits of padding. Each entry in the table is 10 bytes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| '''ID'''; referenced in [[EVNT]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| '''SoundMacro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 1&lt;br /&gt;
| '''Max number of voices'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 1&lt;br /&gt;
| '''Priority'''; voices are limited, so priority is used to play more important sounds over others&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| '''Definite Velocity'''; volume (usually 7F)&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| '''Panning'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2&lt;br /&gt;
| '''Definite Key'''; The default pitch (usually 0x3C00... the second byte may possibly be the MIDI channel)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sample ===&lt;br /&gt;
&lt;br /&gt;
The Sample chunk is all the sound data encoded using the standard Gamecube DSP ADPCM codec.  It can be decoded the same way as a [[DSP (File Format)|DSP]] file. Each sound's size is padded to 32 bytes before the next sound's data begins.&lt;br /&gt;
&lt;br /&gt;
=== Sample Directory ===&lt;br /&gt;
&lt;br /&gt;
The Sample Directory chunk (chunk 4 in Metroid Prime, chunk 3 in Metroid Prime 2) is made up of two sets of tables. The structure of both these tables is identical between both games.&lt;br /&gt;
&lt;br /&gt;
==== Table A ====&lt;br /&gt;
&lt;br /&gt;
The first metadata table has one entry per sound, and is terminated with 0xFFFFFFFF; since there's no known sound count anywhere in the file, the only way to read this correctly is to read until you reach the terminator value. Each entry is 0x20 bytes long.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sound ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| '''Padding'''; always 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sound start offset''', relative to the start of the ADPCM chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 1&lt;br /&gt;
| '''Pitch'''; usually 0x3C. 0x3C is note C4 &amp;quot;Middle C&amp;quot; on the MIDI Keyboard. The keyboard notes are inverted - i.e., 0x48 is for note C3 and 0x30 is for note C5.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 1&lt;br /&gt;
| '''Padding'''; always 0&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sample rate'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Number of samples'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Loop start sample'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Loop length''', in samples. To get the loop end sample, add this to the start sample and subtract 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| '''Table B entry offset''', relative to the start of the sound metadata chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Table B ====&lt;br /&gt;
&lt;br /&gt;
These are accessed through the offsets in table A's entries; note that it might not match the sound count, because the same entry in this table can be used with multiple sounds. Each entry is 0x28 bytes long.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''; always 8}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 1&lt;br /&gt;
| '''Initial predictor/scale''' (matches first frame header)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 1&lt;br /&gt;
| '''Loop predictor/scale''' (matches loop start frame header)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''Loop context sample history 1'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| '''Loop context sample history 2'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2 &amp;amp;times; 16&lt;br /&gt;
| '''Decode coefficients'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
* [https://drive.google.com/file/d/0B9MLV21H7SDvemgwN1daYnliSjA/view?usp=sharing Prime Audio Decoder] by Parax will dump all sound effects contained in a given AGSC file.&lt;br /&gt;
&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Audio]]&lt;br /&gt;
[[Category:Metroid Prime]]&lt;br /&gt;
[[Category:Metroid Prime 2: Echoes]]&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=AGSC_(File_Format)&amp;diff=993</id>
		<title>AGSC (File Format)</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=AGSC_(File_Format)&amp;diff=993"/>
				<updated>2015-03-30T02:41:19Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: /* Table A */ Figured out pitch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''AGSC''' is the sound effect format for Metroid Prime and Metroid Prime 2: Echoes. Each AGSC file contains a group of sound effects. The first two Metroid Prime games utilize the MusyX audio engine created by Factor5 and as a result, AGSC files are essentially just embedded MusyX files. &lt;br /&gt;
&lt;br /&gt;
The audio codec used in AGSC is the standard GameCube DSP ADPCM codec.  &lt;br /&gt;
&lt;br /&gt;
{{todo|Better descriptions for how SoundMacros work and a description for what each command does.}}&lt;br /&gt;
{{research|minor|The proj and sdir chunks have a couple unknowns left.}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The AGSC format is essentially four data chunks combined into one resource, each of which is a standard MusyX file. Of the four data chunks (pool, proj, samp, and sdir), there's one for sound engine scripts, one for sound properties, one for actual ADPCM sound data, and one for sound metadata. The main difference between Prime 1 and 2 is the header, and some slight changes in the way the four chunks are organized. In Metroid Prime, each chunk begins with its own size value; in Metroid Prime 2, every chunk instead has its size listed at the beginning of the file, at the end of the header. In addition, in Metroid Prime, the third chunk is samp, and the fourth is sdir; in Metroid Prime 2, it's the other way around.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
==== Metroid Prime ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| '''D'''&lt;br /&gt;
| '''Audio Directory'''. Always &amp;quot;Audio/.&amp;quot; Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 + D&lt;br /&gt;
| '''N'''&lt;br /&gt;
| '''Audio Group Name'''. Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 + D + N&lt;br /&gt;
|colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Metroid Prime 2 ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''; always 1}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| D&lt;br /&gt;
| '''Audio Group Name'''. Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 + D&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|Copy of '''first project unknown'''; 0xffff if empty}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Pool size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xA + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Project size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xE + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample directory size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 + D&lt;br /&gt;
| colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pool ===&lt;br /&gt;
&lt;br /&gt;
The Pool chunk contains tables for SoundMacros, ADSR, keymaps, and layers, if applicable. It starts with a 16-byte header before the different data tables begin.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacros Offset''' (always 0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Tables Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''Keymaps Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Layers Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SoundMacros ====&lt;br /&gt;
&lt;br /&gt;
The first Pool table denotes MusyX's '''SoundMacros''', small scripts that apply various effects on the sounds in the game.  Each macro is composed of a header followed by a number of commands; each command specifies its type through a single-byte command ID, then specifies the parameters of that particular command, which vary.&lt;br /&gt;
&lt;br /&gt;
The header of each SoundMacro is eight bytes, and is structured as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacro size''' ''(note: includes the size value itself)''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''SoundMacro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''; usually 0}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| colspan=2 {{unknown|Commands begin}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
On the commands, each 4 bytes were originally little endian, but have been swapped to big endian in the AGSC files (despite not being longs). To read the data as originally formatted, every four bytes needs to be byte-swapped. Each command is 8 bytes, and is structured as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| '''Command ID''' (varies; there are 79 known commands in the MusyX audio engine.)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 7&lt;br /&gt;
| '''Command arguments''' (varies between commands)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The SoundMacro will continue with commands until it terminates when the END command is executed.  The command ID for END is 0 and has null command arguments; the next SoundMacro begins after reading it. &lt;br /&gt;
&lt;br /&gt;
These are the possible commands:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! width=&amp;quot;2%&amp;quot; | ID&lt;br /&gt;
! width=&amp;quot;7%&amp;quot; | Name&lt;br /&gt;
! colspan=&amp;quot;91%&amp;quot; | Arguments&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| STOP&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| SPLITKEY&lt;br /&gt;
| Keynumber&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| SPLITVEL&lt;br /&gt;
| Velocity&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| WAIT_TICKS&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sampleend&lt;br /&gt;
| Absolute&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| LOOP&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sampleend&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Times&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| GOTO&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| WAIT_MS&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sample end&lt;br /&gt;
| Absolute&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| PLAYMACRO&lt;br /&gt;
| Addnote&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| Priority&lt;br /&gt;
| MaxVoices&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| SENDKEYOFF&lt;br /&gt;
| Variable&lt;br /&gt;
| Last started&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| SPLITMOD&lt;br /&gt;
| Mod value&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| PIANOPAN&lt;br /&gt;
| Scale&lt;br /&gt;
| Centerkey&lt;br /&gt;
| Centerpan&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| SETADSR&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (ADSR)&lt;br /&gt;
| DLS mode&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| SCALEVOLUME&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| PANNING&lt;br /&gt;
| Pan position&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Time ms&lt;br /&gt;
| Width&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| ENVELOPE&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| STARTSAMPLE&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Sample-ID&lt;br /&gt;
| Mode&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x11&lt;br /&gt;
| STOPSAMPLE&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| KEYOFF&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x13&lt;br /&gt;
| SPLITRND&lt;br /&gt;
| RND&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| FADE-IN&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| SPANNING&lt;br /&gt;
| Pan position&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Time ms&lt;br /&gt;
| Width&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| SETADSRCTRL&lt;br /&gt;
| Attack&lt;br /&gt;
| Decay&lt;br /&gt;
| Sustain&lt;br /&gt;
| Relase&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| RNDNOTE&lt;br /&gt;
| Note Lo&lt;br /&gt;
| Detune&lt;br /&gt;
| Note Hi&lt;br /&gt;
| Fixed/Free&lt;br /&gt;
| Abs/Rel&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| ADDNOTE&lt;br /&gt;
| Add&lt;br /&gt;
| Detune&lt;br /&gt;
| org key&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| SETNOTE&lt;br /&gt;
| Key&lt;br /&gt;
| Detune&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| LASTNOTE&lt;br /&gt;
| Add&lt;br /&gt;
| detune&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B&lt;br /&gt;
| PORTAMENTO&lt;br /&gt;
| Port. State&lt;br /&gt;
| Port. Type&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| VIBRATO&lt;br /&gt;
| Level note&lt;br /&gt;
| Level fine&lt;br /&gt;
| Modwheel flag&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| PITCHSWEEP1&lt;br /&gt;
| Times&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| PITCHSWEEP2&lt;br /&gt;
| Times&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| SETPITCH&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | Frequency (Hz)&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Fine&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| SETPITCHADSR&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (ADSR)&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| Note range&lt;br /&gt;
| Detune range&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| SCALEVOLUME DLS&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scale&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| MOD2VIBRANGE&lt;br /&gt;
| Key range&lt;br /&gt;
| Cent range&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x23&lt;br /&gt;
| SETUP TREMOLO&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Tremolo scale&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Modw. add scale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| RETURN&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| GOSUB&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| TRAP_EVENT&lt;br /&gt;
| Event&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| SEND_MESSAGE&lt;br /&gt;
| IsVar&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Macro&lt;br /&gt;
| VID&lt;br /&gt;
| Varibale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| GET_MESSAGE&lt;br /&gt;
| Varibale&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B&lt;br /&gt;
| GET_VID&lt;br /&gt;
| Varibale&lt;br /&gt;
| PLAY_MACRO&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| ADDAGECOUNT&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| SETAGECOUNT&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Counter&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| SENDFLAG&lt;br /&gt;
| Flag-ID&lt;br /&gt;
| Value&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| PITCHWHEELR&lt;br /&gt;
| Range up&lt;br /&gt;
| Range down&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| SETPRIORITY&lt;br /&gt;
| Prio&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| ADDPRIORITY&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| AGECNTSPEED&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | Time&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| AGECNTVEL&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | AGE Base&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | AGE Scale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| VOL_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| PAN_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| PitchW_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x43&lt;br /&gt;
| ModW_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| PEDAL_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x45&lt;br /&gt;
| PORTA_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| REVERB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x47&lt;br /&gt;
| SPAN_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| DOPPLER_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x49&lt;br /&gt;
| TREMOLO_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| PREA_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B&lt;br /&gt;
| PREB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| POSTB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4D&lt;br /&gt;
| AUXAFX_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| AUXBFX_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| SETUP_LFO&lt;br /&gt;
| LFO Nr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Period in ms&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| MODE_SELECT&lt;br /&gt;
| DLS vol&lt;br /&gt;
| ITD&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x59&lt;br /&gt;
| SET_KEYGROUP&lt;br /&gt;
| group&lt;br /&gt;
| kill&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A&lt;br /&gt;
| SRCMODE_SELECT&lt;br /&gt;
| SRC type&lt;br /&gt;
| Type 0 SRC filter&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| ADD_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B +&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x61&lt;br /&gt;
| SUB_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B -&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x62&lt;br /&gt;
| MUL_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B *&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x63&lt;br /&gt;
| DIV_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B /&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| ADDI_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B +&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Immediate&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| IF_EQUAL&lt;br /&gt;
| Ctrl&lt;br /&gt;
| A ==&lt;br /&gt;
| Ctrl&lt;br /&gt;
| B&lt;br /&gt;
| Not&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro Step&lt;br /&gt;
|-&lt;br /&gt;
| 0x71&lt;br /&gt;
| IF_LESS&lt;br /&gt;
| Ctrl&lt;br /&gt;
| A &amp;lt;&lt;br /&gt;
| Ctrl&lt;br /&gt;
| B&lt;br /&gt;
| Not&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro Step&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| END&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After the last soundmacro, the table terminated by a value of 0xFFFF.&lt;br /&gt;
&lt;br /&gt;
==== Tables ====&lt;br /&gt;
&lt;br /&gt;
'''Tables''' have two functions: for defining curves for volume scaling, or to be used as ADSR envelopes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Table size'''; (usually 0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''Table ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}; (always 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 1&lt;br /&gt;
| '''Attack time (0-255 milliseconds)'''; no multiplication is done to the value&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| 1&lt;br /&gt;
| '''Attack time (0-65280 milliseconds)'''; multiply value by 256&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| 1&lt;br /&gt;
| '''Decay time (0-255 milliseconds)''';  no multiplication is done to the value&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| 1&lt;br /&gt;
| '''Decay time (0-65280 milliseconds)'''; multiply value by 256&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 1&lt;br /&gt;
| '''Sustain (percentage)'''; multiply value by 0.0244&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 1&lt;br /&gt;
| '''Sustain (percentage)'''; multiply value by 6.25&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 1&lt;br /&gt;
| '''Release time (0-255 milliseconds)''';  no multiplication is done to the value&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| 1&lt;br /&gt;
| '''Release time (0-65280 milliseconds)'''; multiply value by 256&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The entire Pool chunk is terminated by a value of 0xFFFF.&lt;br /&gt;
&lt;br /&gt;
=== Project ===&lt;br /&gt;
&lt;br /&gt;
The Project properties chunk contains values for the sounds, including priority, polyphony, volume, etc.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Proj chunk size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}; Always 0x1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacro ID table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample ID table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Tables table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Keymaps table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Layers table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacro Settings Table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| '''Unknown Table D offset''' ''(usually 0, indicating table is not present)''&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4&lt;br /&gt;
| '''Unknown Table E offset''' ''(usually 0, indicating table is not present)''&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| colspan=2 {{unknown|End of proj header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After the header are a number of data tables. &lt;br /&gt;
&lt;br /&gt;
==== SoundMacro ID Table ====&lt;br /&gt;
&lt;br /&gt;
This is a table of shorts; there's no count value, so it's terminated with a value of 0xFFFF. It's a list of SoundMacro IDs present in the file. Occasionally there's gaps in the list; these gaps are signified by the top bit, 0x8000, being set on the size value preceding the gap.&lt;br /&gt;
&lt;br /&gt;
==== Sample ID Table ====&lt;br /&gt;
&lt;br /&gt;
This functions the same way as the SoundMacro ID table, but it contains a list sample IDs instead.&lt;br /&gt;
&lt;br /&gt;
==== SoundMacro Settings ====&lt;br /&gt;
&lt;br /&gt;
This table begins with a 16-bit count value, then 16 bits of padding. Each entry in the table is 10 bytes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| '''ID'''; referenced in [[EVNT]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| '''SoundMacro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 1&lt;br /&gt;
| '''Max number of voices'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 1&lt;br /&gt;
| '''Priority'''; voices are limited, so priority is used to play more important sounds over others&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| '''Definite Velocity'''; volume (usually 7F)&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| '''Panning'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2&lt;br /&gt;
| '''Definite Key'''; The default pitch (usually 0x3C00... the second byte may possibly be the MIDI channel)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sample ===&lt;br /&gt;
&lt;br /&gt;
The Sample chunk is all the sound data encoded using the standard Gamecube DSP ADPCM codec.  It can be decoded the same way as a [[DSP (File Format)|DSP]] file. Each sound's size is padded to 32 bytes before the next sound's data begins.&lt;br /&gt;
&lt;br /&gt;
=== Sample Directory ===&lt;br /&gt;
&lt;br /&gt;
The Sample Directory chunk (chunk 4 in Metroid Prime, chunk 3 in Metroid Prime 2) is made up of two sets of tables. The structure of both these tables is identical between both games.&lt;br /&gt;
&lt;br /&gt;
==== Table A ====&lt;br /&gt;
&lt;br /&gt;
The first metadata table has one entry per sound, and is terminated with 0xFFFFFFFF; since there's no known sound count anywhere in the file, the only way to read this correctly is to read until you reach the terminator value. Each entry is 0x20 bytes long.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sound ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| '''Padding'''; always 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sound start offset''', relative to the start of the ADPCM chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 1&lt;br /&gt;
| '''Pitch'''; always 0x3C (0x3C is note C4 &amp;quot;Middle C&amp;quot; on the MIDI Keyboard.  The keyboard notes are inverted - i.e., 0x48 is for note C3 and 0x30 is for note C5.) &lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 1&lt;br /&gt;
| '''Padding'''; always 0&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sample rate'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Number of samples'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Loop start sample'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Loop length''', in samples. To get the loop end sample, add this to the start sample and subtract 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| '''Table B entry offset''', relative to the start of the sound metadata chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Table B ====&lt;br /&gt;
&lt;br /&gt;
These are accessed through the offsets in table A's entries; note that it might not match the sound count, because the same entry in this table can be used with multiple sounds. Each entry is 0x28 bytes long.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''; always 8}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 1&lt;br /&gt;
| '''Initial predictor/scale''' (matches first frame header)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 1&lt;br /&gt;
| '''Loop predictor/scale''' (matches loop start frame header)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''Loop context sample history 1'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| '''Loop context sample history 2'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2 &amp;amp;times; 16&lt;br /&gt;
| '''Decode coefficients'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
* [https://drive.google.com/file/d/0B9MLV21H7SDvemgwN1daYnliSjA/view?usp=sharing Prime Audio Decoder] by Parax will dump all sound effects contained in a given AGSC file.&lt;br /&gt;
&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Audio]]&lt;br /&gt;
[[Category:Metroid Prime]]&lt;br /&gt;
[[Category:Metroid Prime 2: Echoes]]&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=CSNG_(File_Format)&amp;diff=904</id>
		<title>CSNG (File Format)</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=CSNG_(File_Format)&amp;diff=904"/>
				<updated>2015-03-12T07:15:49Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''CSNG format''' contains MIDI data. It appears in Metroid Prime 1 and 2.  It is essentially MusyX's SON music format, with a custom header. &lt;br /&gt;
&lt;br /&gt;
The offsets are absolute and must be located with the CSNG header removed.&lt;br /&gt;
&lt;br /&gt;
{{research|3|Nothing is known about this format.}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
=== Custom Header ===&lt;br /&gt;
&lt;br /&gt;
This 0x14-byte header isn't part of the MusyX format; it appears at the start of the file. After parsing this the rest of the file is copied into a buffer and then passed to the MusyX functions.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Magic'''; (always 0x2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sequence Index'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''Voice Count'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''[[AGSC (File Format)|AGSC]] ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''File Length'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| colspan=2 {{unknown|MusyX data starts}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Voice Header Table Offset''' (start of MusyX SON data)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Voice Sequence Offsets Table Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''Wave Index Table Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}; (always 0...probably another offset)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Initial BPM Rate'''; AKA Tempo (always 0x78 = 120 beats per minute)&lt;br /&gt;
|-&lt;br /&gt;
| colspan=3 {{unknown|WIP}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Data==&lt;br /&gt;
&lt;br /&gt;
The data in the files is very similar to MIDI, however it is formatted by word, rather than MIDI's byte formatting.&lt;br /&gt;
&lt;br /&gt;
After the data for the instruments are defined, there is a table of offsets for data through out the SON data.  Each chunk of data starts with a long 0x8, usually followed by another absolute offset that points to the end of the chunk.&lt;br /&gt;
&lt;br /&gt;
Notes durations are controlled by 96 ticks per beat.&lt;br /&gt;
&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Metroid Prime]]&lt;br /&gt;
[[Category:Metroid Prime 2: Echoes]]&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=CSNG_(File_Format)&amp;diff=886</id>
		<title>CSNG (File Format)</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=CSNG_(File_Format)&amp;diff=886"/>
				<updated>2015-03-06T10:05:09Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: Thanks to jackoalan for helping crack this format even further!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''CSNG format''' contains MIDI data. It appears in Metroid Prime 1 and 2.  It is essentially MusyX's SON music format.&lt;br /&gt;
&lt;br /&gt;
{{research|3|Nothing is known about this format.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Magic'''; (always 0x2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sequence Index'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''Voice Count'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''[[AGSC (File Format)|AGSC]] ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''File Length'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Voice Header Table Offset''' (start of MusyX SON data)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Voice Sequence Offsets Table Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| '''Wave Index Table Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}; (always 0...probably another offset)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4&lt;br /&gt;
| '''Initial BPM Rate'''; AKA Tempo (always 0x78 = 120 beats per minute)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| {{unknown|WIP}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Metroid Prime]]&lt;br /&gt;
[[Category:Metroid Prime 2: Echoes]]&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=CSNG_(File_Format)&amp;diff=885</id>
		<title>CSNG (File Format)</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=CSNG_(File_Format)&amp;diff=885"/>
				<updated>2015-03-05T08:38:23Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''CSNG format''' contains MIDI data. It appears in Metroid Prime 1 and 2.  It is essentially MusyX's SON music format.&lt;br /&gt;
&lt;br /&gt;
{{research|3|Nothing is known about this format.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4&lt;br /&gt;
| '''Initial BPM Rate'''; AKA Tempo (always 0x78 = 120 beats per minute)&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| {{unknown|WIP}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Metroid Prime]]&lt;br /&gt;
[[Category:Metroid Prime 2: Echoes]]&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=AGSC_(File_Format)&amp;diff=884</id>
		<title>AGSC (File Format)</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=AGSC_(File_Format)&amp;diff=884"/>
				<updated>2015-03-05T07:46:57Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: /* Tables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''AGSC''' is the sound effect format for Metroid Prime and Metroid Prime 2: Echoes. Each AGSC file contains a group of sound effects. The first two Metroid Prime games utilize the MusyX audio engine created by Factor5 and as a result, AGSC files are essentially just embedded MusyX files. &lt;br /&gt;
&lt;br /&gt;
The audio codec used in AGSC is the standard GameCube DSP ADPCM codec.  &lt;br /&gt;
&lt;br /&gt;
{{todo|Better descriptions for how SoundMacros work and a description for what each command does.}}&lt;br /&gt;
{{researchmoderate&lt;br /&gt;
|reason=The proj chunk and the sdir chunk still need some reverse-engineering.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The AGSC format is essentially four data chunks combined into one resource, each of which is a standard MusyX file. Of the four data chunks (pool, proj, samp, and sdir), there's one for sound engine scripts, one for sound properties, one for actual ADPCM sound data, and one for sound metadata. The main difference between Prime 1 and 2 is the header, and some slight changes in the way the four chunks are organized. In Metroid Prime, each chunk begins with its own size value; in Metroid Prime 2, every chunk instead has its size listed at the beginning of the file, at the end of the header. In addition, in Metroid Prime, the third chunk is samp, and the fourth is sdir; in Metroid Prime 2, it's the other way around.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
==== Metroid Prime ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| '''D'''&lt;br /&gt;
| '''Audio Directory'''. Always &amp;quot;Audio/.&amp;quot; Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 + D&lt;br /&gt;
| '''N'''&lt;br /&gt;
| '''Audio Group Name'''. Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 + D + N&lt;br /&gt;
|colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Metroid Prime 2 ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''; always 1}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| D&lt;br /&gt;
| '''Audio Group Name'''. Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Pool size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Project size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample directory size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 + D&lt;br /&gt;
| colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pool ===&lt;br /&gt;
&lt;br /&gt;
The Pool chunk contains tables for SoundMacros, ADSR, keymaps, and layers, if applicable. It starts with a 16-byte header before the different data tables begin.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacros Offset''' (always 0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Tables Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''Keymaps Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Layers Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SoundMacros ====&lt;br /&gt;
&lt;br /&gt;
The first Pool table denotes MusyX's '''SoundMacros''', small scripts that apply various effects on the sounds in the game.  Each macro is composed of a header followed by a number of commands; each command specifies its type through a single-byte command ID, then specifies the parameters of that particular command, which vary.&lt;br /&gt;
&lt;br /&gt;
The header of each SoundMacro is eight bytes, and is structured as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacro size''' ''(note: includes the size value itself)''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''SoundMacro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''; usually 0}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| colspan=2 {{unknown|Commands begin}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
On the commands, each 4 bytes were originally little endian, but have been swapped to big endian in the AGSC files (despite not being longs). To read the data as originally formatted, every four bytes needs to be byte-swapped. Each command is 8 bytes, and is structured as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| '''Command ID''' (varies; there are 79 known commands in the MusyX audio engine.)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 7&lt;br /&gt;
| '''Command arguments''' (varies between commands)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The SoundMacro will continue with commands until it terminates when the END command is executed.  The command ID for END is 0 and has null command arguments; the next SoundMacro begins after reading it. &lt;br /&gt;
&lt;br /&gt;
These are the possible commands:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! width=&amp;quot;2%&amp;quot; | ID&lt;br /&gt;
! width=&amp;quot;7%&amp;quot; | Name&lt;br /&gt;
! colspan=&amp;quot;91%&amp;quot; | Arguments&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| STOP&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| SPLITKEY&lt;br /&gt;
| Keynumber&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| SPLITVEL&lt;br /&gt;
| Velocity&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| WAIT_TICKS&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sampleend&lt;br /&gt;
| Absolute&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| LOOP&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sampleend&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Times&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| GOTO&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| WAIT_MS&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sample end&lt;br /&gt;
| Absolute&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| PLAYMACRO&lt;br /&gt;
| Addnote&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| Priority&lt;br /&gt;
| MaxVoices&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| SENDKEYOFF&lt;br /&gt;
| Variable&lt;br /&gt;
| Last started&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| SPLITMOD&lt;br /&gt;
| Mod value&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| PIANOPAN&lt;br /&gt;
| Scale&lt;br /&gt;
| Centerkey&lt;br /&gt;
| Centerpan&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| SETADSR&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (ADSR)&lt;br /&gt;
| DLS mode&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| SCALEVOLUME&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| PANNING&lt;br /&gt;
| Pan position&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Time ms&lt;br /&gt;
| Width&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| ENVELOPE&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| STARTSAMPLE&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Sample-ID&lt;br /&gt;
| Mode&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x11&lt;br /&gt;
| STOPSAMPLE&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| KEYOFF&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x13&lt;br /&gt;
| SPLITRND&lt;br /&gt;
| RND&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| FADE-IN&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| SPANNING&lt;br /&gt;
| Pan position&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Time ms&lt;br /&gt;
| Width&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| SETADSRCTRL&lt;br /&gt;
| Attack&lt;br /&gt;
| Decay&lt;br /&gt;
| Sustain&lt;br /&gt;
| Relase&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| RNDNOTE&lt;br /&gt;
| Note Lo&lt;br /&gt;
| Detune&lt;br /&gt;
| Note Hi&lt;br /&gt;
| Fixed/Free&lt;br /&gt;
| Abs/Rel&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| ADDNOTE&lt;br /&gt;
| Add&lt;br /&gt;
| Detune&lt;br /&gt;
| org key&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| SETNOTE&lt;br /&gt;
| Key&lt;br /&gt;
| Detune&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| LASTNOTE&lt;br /&gt;
| Add&lt;br /&gt;
| detune&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B&lt;br /&gt;
| PORTAMENTO&lt;br /&gt;
| Port. State&lt;br /&gt;
| Port. Type&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| VIBRATO&lt;br /&gt;
| Level note&lt;br /&gt;
| Level fine&lt;br /&gt;
| Modwheel flag&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| PITCHSWEEP1&lt;br /&gt;
| Times&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| PITCHSWEEP2&lt;br /&gt;
| Times&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| SETPITCH&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | Frequency (Hz)&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Fine&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| SETPITCHADSR&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (ADSR)&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| Note range&lt;br /&gt;
| Detune range&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| SCALEVOLUME DLS&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scale&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| MOD2VIBRANGE&lt;br /&gt;
| Key range&lt;br /&gt;
| Cent range&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x23&lt;br /&gt;
| SETUP TREMOLO&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Tremolo scale&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Modw. add scale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| RETURN&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| GOSUB&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| TRAP_EVENT&lt;br /&gt;
| Event&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| SEND_MESSAGE&lt;br /&gt;
| IsVar&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Macro&lt;br /&gt;
| VID&lt;br /&gt;
| Varibale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| GET_MESSAGE&lt;br /&gt;
| Varibale&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B&lt;br /&gt;
| GET_VID&lt;br /&gt;
| Varibale&lt;br /&gt;
| PLAY_MACRO&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| ADDAGECOUNT&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| SETAGECOUNT&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Counter&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| SENDFLAG&lt;br /&gt;
| Flag-ID&lt;br /&gt;
| Value&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| PITCHWHEELR&lt;br /&gt;
| Range up&lt;br /&gt;
| Range down&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| SETPRIORITY&lt;br /&gt;
| Prio&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| ADDPRIORITY&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| AGECNTSPEED&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | Time&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| AGECNTVEL&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | AGE Base&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | AGE Scale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| VOL_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| PAN_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| PitchW_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x43&lt;br /&gt;
| ModW_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| PEDAL_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x45&lt;br /&gt;
| PORTA_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| REVERB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x47&lt;br /&gt;
| SPAN_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| DOPPLER_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x49&lt;br /&gt;
| TREMOLO_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| PREA_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B&lt;br /&gt;
| PREB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| POSTB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4D&lt;br /&gt;
| AUXAFX_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| AUXBFX_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| SETUP_LFO&lt;br /&gt;
| LFO Nr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Period in ms&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| MODE_SELECT&lt;br /&gt;
| DLS vol&lt;br /&gt;
| ITD&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x59&lt;br /&gt;
| SET_KEYGROUP&lt;br /&gt;
| group&lt;br /&gt;
| kill&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A&lt;br /&gt;
| SRCMODE_SELECT&lt;br /&gt;
| SRC type&lt;br /&gt;
| Type 0 SRC filter&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| ADD_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B +&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x61&lt;br /&gt;
| SUB_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B -&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x62&lt;br /&gt;
| MUL_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B *&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x63&lt;br /&gt;
| DIV_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B /&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| ADDI_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B +&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Immediate&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| IF_EQUAL&lt;br /&gt;
| Ctrl&lt;br /&gt;
| A ==&lt;br /&gt;
| Ctrl&lt;br /&gt;
| B&lt;br /&gt;
| Not&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro Step&lt;br /&gt;
|-&lt;br /&gt;
| 0x71&lt;br /&gt;
| IF_LESS&lt;br /&gt;
| Ctrl&lt;br /&gt;
| A &amp;lt;&lt;br /&gt;
| Ctrl&lt;br /&gt;
| B&lt;br /&gt;
| Not&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro Step&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| END&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After the last soundmacro, the table terminated by a value of 0xFFFF.&lt;br /&gt;
&lt;br /&gt;
==== Tables ====&lt;br /&gt;
&lt;br /&gt;
'''Tables''' have two functions: for defining curves for volume scaling, or to be used as ADSR envelopes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Table size'''; (usually 0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''Table ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}; (always 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 1&lt;br /&gt;
| '''Attack time (0-255 milliseconds)'''; no multiplication is done to the value&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| 1&lt;br /&gt;
| '''Attack time (0-65280 milliseconds)'''; multiply value by 256&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| 1&lt;br /&gt;
| '''Decay time (0-255 milliseconds)''';  no multiplication is done to the value&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| 1&lt;br /&gt;
| '''Decay time (0-65280 milliseconds)'''; multiply value by 256&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 1&lt;br /&gt;
| '''Sustain (percentage)'''; multiply value by 0.0244&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 1&lt;br /&gt;
| '''Sustain (percentage)'''; multiply value by 6.25&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 1&lt;br /&gt;
| '''Release time (0-255 milliseconds)''';  no multiplication is done to the value&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| 1&lt;br /&gt;
| '''Release time (0-65280 milliseconds)'''; multiply value by 256&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The entire Pool chunk is terminated by a value of 0xFFFF.&lt;br /&gt;
&lt;br /&gt;
=== Project ===&lt;br /&gt;
&lt;br /&gt;
The Project properties chunk contains values for the sounds, including priority, polyphony, volume, etc.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Proj chunk size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}; Always 0x1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacro ID table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample ID table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Tables table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Keymaps table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Layers table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacro Settings Table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| '''Unknown Table D offset''' ''(usually 0, indicating table is not present)''&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4&lt;br /&gt;
| '''Unknown Table E offset''' ''(usually 0, indicating table is not present)''&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| colspan=2 {{unknown|End of proj header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After the header are a number of data tables. &lt;br /&gt;
&lt;br /&gt;
==== SoundMacro ID Table ====&lt;br /&gt;
&lt;br /&gt;
This is a table of shorts; there's no count value, so it's terminated with a value of 0xFFFF. It's a list of SoundMacro IDs present in the file. Occasionally there's gaps in the list; these gaps are signified by the top bit, 0x8000, being set on the size value preceding the gap.&lt;br /&gt;
&lt;br /&gt;
==== Sample ID Table ====&lt;br /&gt;
&lt;br /&gt;
This functions the same way as the SoundMacro ID table, but it contains a list sample IDs instead.&lt;br /&gt;
&lt;br /&gt;
==== SoundMacro Settings ====&lt;br /&gt;
&lt;br /&gt;
This table begins with a 16-bit count value, then 16 bits of padding. Each entry in the table is 10 bytes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| '''ID'''; referenced in [[EVNT]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| '''SoundMacro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 1&lt;br /&gt;
| '''Max number of voices'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 1&lt;br /&gt;
| '''Priority'''; voices are limited, so priority is used to play more important sounds over others&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| '''Definite Velocity'''; volume (usually 7F)&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| '''Panning'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2&lt;br /&gt;
| '''Definite Key'''; The default pitch (usually 0x3C00... the second byte may possibly be the MIDI channel)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sample ===&lt;br /&gt;
&lt;br /&gt;
The Sample chunk is all the sound data encoded using the standard Gamecube DSP ADPCM codec.  It can be decoded the same way as a [[DSP (File Format)|DSP]] file. Each sound's size is padded to 32 bytes before the next sound's data begins.&lt;br /&gt;
&lt;br /&gt;
=== Sample Directory ===&lt;br /&gt;
&lt;br /&gt;
The Sample Directory chunk (chunk 4 in Metroid Prime, chunk 3 in Metroid Prime 2) is made up of two sets of tables. The structure of both these tables is identical between both games.&lt;br /&gt;
&lt;br /&gt;
==== Table A ====&lt;br /&gt;
&lt;br /&gt;
The first metadata table has one entry per sound, and is terminated with 0xFFFFFFFF; since there's no known sound count anywhere in the file, the only way to read this correctly is to read until you reach the terminator value. Each entry is 0x20 bytes long.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sound ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| '''Padding'''; always 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sound start offset''', relative to the start of the ADPCM chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 2&lt;br /&gt;
| '''Pitch'''; stored as a half-float, always 0x3C00 (1.0)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sample rate'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Number of samples'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Loop start sample'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Loop length''', in samples. To get the loop end sample, add this to the start sample and subtract 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| '''Table B entry offset''', relative to the start of the sound metadata chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Table B ====&lt;br /&gt;
&lt;br /&gt;
These are accessed through the offsets in table A's entries; note that it might not match the sound count, because the same entry in this table can be used with multiple sounds. Each entry is 0x28 bytes long.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''; always 8}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 1&lt;br /&gt;
| '''Initial predictor/scale''' (matches first frame header)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 1&lt;br /&gt;
| '''Loop predictor/scale''' (matches loop start frame header)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''Loop context sample history 1'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| '''Loop context sample history 2'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2 &amp;amp;times; 16&lt;br /&gt;
| '''Decode coefficients'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
* [https://drive.google.com/file/d/0B9MLV21H7SDvemgwN1daYnliSjA/view?usp=sharing Prime Audio Decoder] by Parax will dump all sound effects contained in a given AGSC file.&lt;br /&gt;
&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Audio]]&lt;br /&gt;
[[Category:Metroid Prime]]&lt;br /&gt;
[[Category:Metroid Prime 2: Echoes]]&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=AGSC_(File_Format)&amp;diff=883</id>
		<title>AGSC (File Format)</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=AGSC_(File_Format)&amp;diff=883"/>
				<updated>2015-03-05T07:45:37Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: /* Tables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''AGSC''' is the sound effect format for Metroid Prime and Metroid Prime 2: Echoes. Each AGSC file contains a group of sound effects. The first two Metroid Prime games utilize the MusyX audio engine created by Factor5 and as a result, AGSC files are essentially just embedded MusyX files. &lt;br /&gt;
&lt;br /&gt;
The audio codec used in AGSC is the standard GameCube DSP ADPCM codec.  &lt;br /&gt;
&lt;br /&gt;
{{todo|Better descriptions for how SoundMacros work and a description for what each command does.}}&lt;br /&gt;
{{researchmoderate&lt;br /&gt;
|reason=The proj chunk and the sdir chunk still need some reverse-engineering.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The AGSC format is essentially four data chunks combined into one resource, each of which is a standard MusyX file. Of the four data chunks (pool, proj, samp, and sdir), there's one for sound engine scripts, one for sound properties, one for actual ADPCM sound data, and one for sound metadata. The main difference between Prime 1 and 2 is the header, and some slight changes in the way the four chunks are organized. In Metroid Prime, each chunk begins with its own size value; in Metroid Prime 2, every chunk instead has its size listed at the beginning of the file, at the end of the header. In addition, in Metroid Prime, the third chunk is samp, and the fourth is sdir; in Metroid Prime 2, it's the other way around.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
==== Metroid Prime ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| '''D'''&lt;br /&gt;
| '''Audio Directory'''. Always &amp;quot;Audio/.&amp;quot; Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 + D&lt;br /&gt;
| '''N'''&lt;br /&gt;
| '''Audio Group Name'''. Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 + D + N&lt;br /&gt;
|colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Metroid Prime 2 ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''; always 1}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| D&lt;br /&gt;
| '''Audio Group Name'''. Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Pool size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Project size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample directory size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 + D&lt;br /&gt;
| colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pool ===&lt;br /&gt;
&lt;br /&gt;
The Pool chunk contains tables for SoundMacros, ADSR, keymaps, and layers, if applicable. It starts with a 16-byte header before the different data tables begin.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacros Offset''' (always 0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Tables Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''Keymaps Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Layers Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SoundMacros ====&lt;br /&gt;
&lt;br /&gt;
The first Pool table denotes MusyX's '''SoundMacros''', small scripts that apply various effects on the sounds in the game.  Each macro is composed of a header followed by a number of commands; each command specifies its type through a single-byte command ID, then specifies the parameters of that particular command, which vary.&lt;br /&gt;
&lt;br /&gt;
The header of each SoundMacro is eight bytes, and is structured as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacro size''' ''(note: includes the size value itself)''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''SoundMacro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''; usually 0}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| colspan=2 {{unknown|Commands begin}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
On the commands, each 4 bytes were originally little endian, but have been swapped to big endian in the AGSC files (despite not being longs). To read the data as originally formatted, every four bytes needs to be byte-swapped. Each command is 8 bytes, and is structured as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| '''Command ID''' (varies; there are 79 known commands in the MusyX audio engine.)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 7&lt;br /&gt;
| '''Command arguments''' (varies between commands)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The SoundMacro will continue with commands until it terminates when the END command is executed.  The command ID for END is 0 and has null command arguments; the next SoundMacro begins after reading it. &lt;br /&gt;
&lt;br /&gt;
These are the possible commands:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! width=&amp;quot;2%&amp;quot; | ID&lt;br /&gt;
! width=&amp;quot;7%&amp;quot; | Name&lt;br /&gt;
! colspan=&amp;quot;91%&amp;quot; | Arguments&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| STOP&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| SPLITKEY&lt;br /&gt;
| Keynumber&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| SPLITVEL&lt;br /&gt;
| Velocity&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| WAIT_TICKS&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sampleend&lt;br /&gt;
| Absolute&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| LOOP&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sampleend&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Times&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| GOTO&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| WAIT_MS&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sample end&lt;br /&gt;
| Absolute&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| PLAYMACRO&lt;br /&gt;
| Addnote&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| Priority&lt;br /&gt;
| MaxVoices&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| SENDKEYOFF&lt;br /&gt;
| Variable&lt;br /&gt;
| Last started&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| SPLITMOD&lt;br /&gt;
| Mod value&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| PIANOPAN&lt;br /&gt;
| Scale&lt;br /&gt;
| Centerkey&lt;br /&gt;
| Centerpan&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| SETADSR&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (ADSR)&lt;br /&gt;
| DLS mode&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| SCALEVOLUME&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| PANNING&lt;br /&gt;
| Pan position&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Time ms&lt;br /&gt;
| Width&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| ENVELOPE&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| STARTSAMPLE&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Sample-ID&lt;br /&gt;
| Mode&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x11&lt;br /&gt;
| STOPSAMPLE&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| KEYOFF&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x13&lt;br /&gt;
| SPLITRND&lt;br /&gt;
| RND&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| FADE-IN&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| SPANNING&lt;br /&gt;
| Pan position&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Time ms&lt;br /&gt;
| Width&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| SETADSRCTRL&lt;br /&gt;
| Attack&lt;br /&gt;
| Decay&lt;br /&gt;
| Sustain&lt;br /&gt;
| Relase&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| RNDNOTE&lt;br /&gt;
| Note Lo&lt;br /&gt;
| Detune&lt;br /&gt;
| Note Hi&lt;br /&gt;
| Fixed/Free&lt;br /&gt;
| Abs/Rel&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| ADDNOTE&lt;br /&gt;
| Add&lt;br /&gt;
| Detune&lt;br /&gt;
| org key&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| SETNOTE&lt;br /&gt;
| Key&lt;br /&gt;
| Detune&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| LASTNOTE&lt;br /&gt;
| Add&lt;br /&gt;
| detune&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B&lt;br /&gt;
| PORTAMENTO&lt;br /&gt;
| Port. State&lt;br /&gt;
| Port. Type&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| VIBRATO&lt;br /&gt;
| Level note&lt;br /&gt;
| Level fine&lt;br /&gt;
| Modwheel flag&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| PITCHSWEEP1&lt;br /&gt;
| Times&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| PITCHSWEEP2&lt;br /&gt;
| Times&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| SETPITCH&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | Frequency (Hz)&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Fine&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| SETPITCHADSR&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (ADSR)&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| Note range&lt;br /&gt;
| Detune range&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| SCALEVOLUME DLS&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scale&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| MOD2VIBRANGE&lt;br /&gt;
| Key range&lt;br /&gt;
| Cent range&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x23&lt;br /&gt;
| SETUP TREMOLO&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Tremolo scale&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Modw. add scale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| RETURN&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| GOSUB&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| TRAP_EVENT&lt;br /&gt;
| Event&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| SEND_MESSAGE&lt;br /&gt;
| IsVar&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Macro&lt;br /&gt;
| VID&lt;br /&gt;
| Varibale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| GET_MESSAGE&lt;br /&gt;
| Varibale&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B&lt;br /&gt;
| GET_VID&lt;br /&gt;
| Varibale&lt;br /&gt;
| PLAY_MACRO&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| ADDAGECOUNT&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| SETAGECOUNT&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Counter&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| SENDFLAG&lt;br /&gt;
| Flag-ID&lt;br /&gt;
| Value&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| PITCHWHEELR&lt;br /&gt;
| Range up&lt;br /&gt;
| Range down&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| SETPRIORITY&lt;br /&gt;
| Prio&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| ADDPRIORITY&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| AGECNTSPEED&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | Time&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| AGECNTVEL&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | AGE Base&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | AGE Scale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| VOL_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| PAN_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| PitchW_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x43&lt;br /&gt;
| ModW_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| PEDAL_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x45&lt;br /&gt;
| PORTA_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| REVERB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x47&lt;br /&gt;
| SPAN_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| DOPPLER_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x49&lt;br /&gt;
| TREMOLO_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| PREA_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B&lt;br /&gt;
| PREB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| POSTB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4D&lt;br /&gt;
| AUXAFX_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| AUXBFX_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| SETUP_LFO&lt;br /&gt;
| LFO Nr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Period in ms&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| MODE_SELECT&lt;br /&gt;
| DLS vol&lt;br /&gt;
| ITD&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x59&lt;br /&gt;
| SET_KEYGROUP&lt;br /&gt;
| group&lt;br /&gt;
| kill&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A&lt;br /&gt;
| SRCMODE_SELECT&lt;br /&gt;
| SRC type&lt;br /&gt;
| Type 0 SRC filter&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| ADD_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B +&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x61&lt;br /&gt;
| SUB_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B -&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x62&lt;br /&gt;
| MUL_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B *&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x63&lt;br /&gt;
| DIV_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B /&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| ADDI_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B +&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Immediate&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| IF_EQUAL&lt;br /&gt;
| Ctrl&lt;br /&gt;
| A ==&lt;br /&gt;
| Ctrl&lt;br /&gt;
| B&lt;br /&gt;
| Not&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro Step&lt;br /&gt;
|-&lt;br /&gt;
| 0x71&lt;br /&gt;
| IF_LESS&lt;br /&gt;
| Ctrl&lt;br /&gt;
| A &amp;lt;&lt;br /&gt;
| Ctrl&lt;br /&gt;
| B&lt;br /&gt;
| Not&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro Step&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| END&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After the last soundmacro, the table terminated by a value of 0xFFFF.&lt;br /&gt;
&lt;br /&gt;
==== Tables ====&lt;br /&gt;
&lt;br /&gt;
'''Tables''' have two functions: for defining curves for volume scaling, or to be used as ADSR envelopes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Table size'''; (usually 0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''Table ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}; (always 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 1&lt;br /&gt;
| '''Attack time (0-255 milliseconds)'''; no multiplication is done to the value&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| 1&lt;br /&gt;
| '''Attack time (0-65280 milliseconds)'''; multiply value by 256&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| 1&lt;br /&gt;
| '''Decay time (0-255 milliseconds)''';  no multiplication is done to the value&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| 1&lt;br /&gt;
| '''Decay time (0-65280 milliseconds)'''; multiply value by 256&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 1&lt;br /&gt;
| '''Sustain (percentage)'''; 0.0244^2&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 1&lt;br /&gt;
| '''Sustain (percentage)'''; 6.25^2&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 1&lt;br /&gt;
| '''Release time (0-255 milliseconds)''';  no multiplication is done to the value&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| 1&lt;br /&gt;
| '''Release time (0-65280 milliseconds)'''; multiply value by 256&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The entire Pool chunk is terminated by a value of 0xFFFF.&lt;br /&gt;
&lt;br /&gt;
=== Project ===&lt;br /&gt;
&lt;br /&gt;
The Project properties chunk contains values for the sounds, including priority, polyphony, volume, etc.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Proj chunk size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}; Always 0x1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacro ID table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample ID table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Tables table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Keymaps table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Layers table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacro Settings Table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| '''Unknown Table D offset''' ''(usually 0, indicating table is not present)''&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4&lt;br /&gt;
| '''Unknown Table E offset''' ''(usually 0, indicating table is not present)''&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| colspan=2 {{unknown|End of proj header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After the header are a number of data tables. &lt;br /&gt;
&lt;br /&gt;
==== SoundMacro ID Table ====&lt;br /&gt;
&lt;br /&gt;
This is a table of shorts; there's no count value, so it's terminated with a value of 0xFFFF. It's a list of SoundMacro IDs present in the file. Occasionally there's gaps in the list; these gaps are signified by the top bit, 0x8000, being set on the size value preceding the gap.&lt;br /&gt;
&lt;br /&gt;
==== Sample ID Table ====&lt;br /&gt;
&lt;br /&gt;
This functions the same way as the SoundMacro ID table, but it contains a list sample IDs instead.&lt;br /&gt;
&lt;br /&gt;
==== SoundMacro Settings ====&lt;br /&gt;
&lt;br /&gt;
This table begins with a 16-bit count value, then 16 bits of padding. Each entry in the table is 10 bytes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| '''ID'''; referenced in [[EVNT]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| '''SoundMacro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 1&lt;br /&gt;
| '''Max number of voices'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 1&lt;br /&gt;
| '''Priority'''; voices are limited, so priority is used to play more important sounds over others&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| '''Definite Velocity'''; volume (usually 7F)&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| '''Panning'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2&lt;br /&gt;
| '''Definite Key'''; The default pitch (usually 0x3C00... the second byte may possibly be the MIDI channel)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sample ===&lt;br /&gt;
&lt;br /&gt;
The Sample chunk is all the sound data encoded using the standard Gamecube DSP ADPCM codec.  It can be decoded the same way as a [[DSP (File Format)|DSP]] file. Each sound's size is padded to 32 bytes before the next sound's data begins.&lt;br /&gt;
&lt;br /&gt;
=== Sample Directory ===&lt;br /&gt;
&lt;br /&gt;
The Sample Directory chunk (chunk 4 in Metroid Prime, chunk 3 in Metroid Prime 2) is made up of two sets of tables. The structure of both these tables is identical between both games.&lt;br /&gt;
&lt;br /&gt;
==== Table A ====&lt;br /&gt;
&lt;br /&gt;
The first metadata table has one entry per sound, and is terminated with 0xFFFFFFFF; since there's no known sound count anywhere in the file, the only way to read this correctly is to read until you reach the terminator value. Each entry is 0x20 bytes long.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sound ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| '''Padding'''; always 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sound start offset''', relative to the start of the ADPCM chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 2&lt;br /&gt;
| '''Pitch'''; stored as a half-float, always 0x3C00 (1.0)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sample rate'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Number of samples'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Loop start sample'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Loop length''', in samples. To get the loop end sample, add this to the start sample and subtract 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| '''Table B entry offset''', relative to the start of the sound metadata chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Table B ====&lt;br /&gt;
&lt;br /&gt;
These are accessed through the offsets in table A's entries; note that it might not match the sound count, because the same entry in this table can be used with multiple sounds. Each entry is 0x28 bytes long.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''; always 8}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 1&lt;br /&gt;
| '''Initial predictor/scale''' (matches first frame header)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 1&lt;br /&gt;
| '''Loop predictor/scale''' (matches loop start frame header)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''Loop context sample history 1'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| '''Loop context sample history 2'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2 &amp;amp;times; 16&lt;br /&gt;
| '''Decode coefficients'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
* [https://drive.google.com/file/d/0B9MLV21H7SDvemgwN1daYnliSjA/view?usp=sharing Prime Audio Decoder] by Parax will dump all sound effects contained in a given AGSC file.&lt;br /&gt;
&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Audio]]&lt;br /&gt;
[[Category:Metroid Prime]]&lt;br /&gt;
[[Category:Metroid Prime 2: Echoes]]&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=AGSC_(File_Format)&amp;diff=881</id>
		<title>AGSC (File Format)</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=AGSC_(File_Format)&amp;diff=881"/>
				<updated>2015-03-05T07:41:48Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: /* Tables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''AGSC''' is the sound effect format for Metroid Prime and Metroid Prime 2: Echoes. Each AGSC file contains a group of sound effects. The first two Metroid Prime games utilize the MusyX audio engine created by Factor5 and as a result, AGSC files are essentially just embedded MusyX files. &lt;br /&gt;
&lt;br /&gt;
The audio codec used in AGSC is the standard GameCube DSP ADPCM codec.  &lt;br /&gt;
&lt;br /&gt;
{{todo|Better descriptions for how SoundMacros work and a description for what each command does.}}&lt;br /&gt;
{{researchmoderate&lt;br /&gt;
|reason=The proj chunk and the sdir chunk still need some reverse-engineering.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The AGSC format is essentially four data chunks combined into one resource, each of which is a standard MusyX file. Of the four data chunks (pool, proj, samp, and sdir), there's one for sound engine scripts, one for sound properties, one for actual ADPCM sound data, and one for sound metadata. The main difference between Prime 1 and 2 is the header, and some slight changes in the way the four chunks are organized. In Metroid Prime, each chunk begins with its own size value; in Metroid Prime 2, every chunk instead has its size listed at the beginning of the file, at the end of the header. In addition, in Metroid Prime, the third chunk is samp, and the fourth is sdir; in Metroid Prime 2, it's the other way around.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
==== Metroid Prime ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| '''D'''&lt;br /&gt;
| '''Audio Directory'''. Always &amp;quot;Audio/.&amp;quot; Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 + D&lt;br /&gt;
| '''N'''&lt;br /&gt;
| '''Audio Group Name'''. Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 + D + N&lt;br /&gt;
|colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Metroid Prime 2 ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''; always 1}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| D&lt;br /&gt;
| '''Audio Group Name'''. Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Pool size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Project size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample directory size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 + D&lt;br /&gt;
| colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pool ===&lt;br /&gt;
&lt;br /&gt;
The Pool chunk contains tables for SoundMacros, ADSR, keymaps, and layers, if applicable. It starts with a 16-byte header before the different data tables begin.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacros Offset''' (always 0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Tables Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''Keymaps Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Layers Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SoundMacros ====&lt;br /&gt;
&lt;br /&gt;
The first Pool table denotes MusyX's '''SoundMacros''', small scripts that apply various effects on the sounds in the game.  Each macro is composed of a header followed by a number of commands; each command specifies its type through a single-byte command ID, then specifies the parameters of that particular command, which vary.&lt;br /&gt;
&lt;br /&gt;
The header of each SoundMacro is eight bytes, and is structured as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacro size''' ''(note: includes the size value itself)''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''SoundMacro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''; usually 0}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| colspan=2 {{unknown|Commands begin}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
On the commands, each 4 bytes were originally little endian, but have been swapped to big endian in the AGSC files (despite not being longs). To read the data as originally formatted, every four bytes needs to be byte-swapped. Each command is 8 bytes, and is structured as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| '''Command ID''' (varies; there are 79 known commands in the MusyX audio engine.)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 7&lt;br /&gt;
| '''Command arguments''' (varies between commands)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The SoundMacro will continue with commands until it terminates when the END command is executed.  The command ID for END is 0 and has null command arguments; the next SoundMacro begins after reading it. &lt;br /&gt;
&lt;br /&gt;
These are the possible commands:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! width=&amp;quot;2%&amp;quot; | ID&lt;br /&gt;
! width=&amp;quot;7%&amp;quot; | Name&lt;br /&gt;
! colspan=&amp;quot;91%&amp;quot; | Arguments&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| STOP&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| SPLITKEY&lt;br /&gt;
| Keynumber&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| SPLITVEL&lt;br /&gt;
| Velocity&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| WAIT_TICKS&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sampleend&lt;br /&gt;
| Absolute&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| LOOP&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sampleend&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Times&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| GOTO&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| WAIT_MS&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sample end&lt;br /&gt;
| Absolute&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| PLAYMACRO&lt;br /&gt;
| Addnote&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| Priority&lt;br /&gt;
| MaxVoices&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| SENDKEYOFF&lt;br /&gt;
| Variable&lt;br /&gt;
| Last started&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| SPLITMOD&lt;br /&gt;
| Mod value&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| PIANOPAN&lt;br /&gt;
| Scale&lt;br /&gt;
| Centerkey&lt;br /&gt;
| Centerpan&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| SETADSR&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (ADSR)&lt;br /&gt;
| DLS mode&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| SCALEVOLUME&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| PANNING&lt;br /&gt;
| Pan position&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Time ms&lt;br /&gt;
| Width&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| ENVELOPE&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| STARTSAMPLE&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Sample-ID&lt;br /&gt;
| Mode&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x11&lt;br /&gt;
| STOPSAMPLE&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| KEYOFF&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x13&lt;br /&gt;
| SPLITRND&lt;br /&gt;
| RND&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| FADE-IN&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| SPANNING&lt;br /&gt;
| Pan position&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Time ms&lt;br /&gt;
| Width&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| SETADSRCTRL&lt;br /&gt;
| Attack&lt;br /&gt;
| Decay&lt;br /&gt;
| Sustain&lt;br /&gt;
| Relase&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| RNDNOTE&lt;br /&gt;
| Note Lo&lt;br /&gt;
| Detune&lt;br /&gt;
| Note Hi&lt;br /&gt;
| Fixed/Free&lt;br /&gt;
| Abs/Rel&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| ADDNOTE&lt;br /&gt;
| Add&lt;br /&gt;
| Detune&lt;br /&gt;
| org key&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| SETNOTE&lt;br /&gt;
| Key&lt;br /&gt;
| Detune&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| LASTNOTE&lt;br /&gt;
| Add&lt;br /&gt;
| detune&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B&lt;br /&gt;
| PORTAMENTO&lt;br /&gt;
| Port. State&lt;br /&gt;
| Port. Type&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| VIBRATO&lt;br /&gt;
| Level note&lt;br /&gt;
| Level fine&lt;br /&gt;
| Modwheel flag&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| PITCHSWEEP1&lt;br /&gt;
| Times&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| PITCHSWEEP2&lt;br /&gt;
| Times&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| SETPITCH&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | Frequency (Hz)&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Fine&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| SETPITCHADSR&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (ADSR)&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| Note range&lt;br /&gt;
| Detune range&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| SCALEVOLUME DLS&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scale&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| MOD2VIBRANGE&lt;br /&gt;
| Key range&lt;br /&gt;
| Cent range&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x23&lt;br /&gt;
| SETUP TREMOLO&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Tremolo scale&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Modw. add scale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| RETURN&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| GOSUB&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| TRAP_EVENT&lt;br /&gt;
| Event&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| SEND_MESSAGE&lt;br /&gt;
| IsVar&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Macro&lt;br /&gt;
| VID&lt;br /&gt;
| Varibale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| GET_MESSAGE&lt;br /&gt;
| Varibale&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B&lt;br /&gt;
| GET_VID&lt;br /&gt;
| Varibale&lt;br /&gt;
| PLAY_MACRO&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| ADDAGECOUNT&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| SETAGECOUNT&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Counter&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| SENDFLAG&lt;br /&gt;
| Flag-ID&lt;br /&gt;
| Value&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| PITCHWHEELR&lt;br /&gt;
| Range up&lt;br /&gt;
| Range down&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| SETPRIORITY&lt;br /&gt;
| Prio&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| ADDPRIORITY&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| AGECNTSPEED&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | Time&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| AGECNTVEL&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | AGE Base&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | AGE Scale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| VOL_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| PAN_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| PitchW_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x43&lt;br /&gt;
| ModW_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| PEDAL_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x45&lt;br /&gt;
| PORTA_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| REVERB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x47&lt;br /&gt;
| SPAN_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| DOPPLER_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x49&lt;br /&gt;
| TREMOLO_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| PREA_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B&lt;br /&gt;
| PREB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| POSTB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4D&lt;br /&gt;
| AUXAFX_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| AUXBFX_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| SETUP_LFO&lt;br /&gt;
| LFO Nr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Period in ms&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| MODE_SELECT&lt;br /&gt;
| DLS vol&lt;br /&gt;
| ITD&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x59&lt;br /&gt;
| SET_KEYGROUP&lt;br /&gt;
| group&lt;br /&gt;
| kill&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A&lt;br /&gt;
| SRCMODE_SELECT&lt;br /&gt;
| SRC type&lt;br /&gt;
| Type 0 SRC filter&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| ADD_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B +&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x61&lt;br /&gt;
| SUB_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B -&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x62&lt;br /&gt;
| MUL_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B *&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x63&lt;br /&gt;
| DIV_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B /&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| ADDI_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B +&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Immediate&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| IF_EQUAL&lt;br /&gt;
| Ctrl&lt;br /&gt;
| A ==&lt;br /&gt;
| Ctrl&lt;br /&gt;
| B&lt;br /&gt;
| Not&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro Step&lt;br /&gt;
|-&lt;br /&gt;
| 0x71&lt;br /&gt;
| IF_LESS&lt;br /&gt;
| Ctrl&lt;br /&gt;
| A &amp;lt;&lt;br /&gt;
| Ctrl&lt;br /&gt;
| B&lt;br /&gt;
| Not&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro Step&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| END&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After the last soundmacro, the table terminated by a value of 0xFFFF.&lt;br /&gt;
&lt;br /&gt;
==== Tables ====&lt;br /&gt;
&lt;br /&gt;
'''Tables''' have two functions: for defining curves for volume scaling, or to be used as ADSR envelopes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Table size'''; (usually 0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''Table ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}; (always 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 1&lt;br /&gt;
| '''Attack time (0-255 milliseconds)'''; no multiplication is done to the value&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| 1&lt;br /&gt;
| '''Attack time (256-65280 milliseconds)'''; 1 = 256, and every next byte is multiples of 2 (256,512,768,...)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| 1&lt;br /&gt;
| '''Decay time (0-255 milliseconds)''';  no multiplication is done to the value&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| 1&lt;br /&gt;
| '''Decay time (256-65280 milliseconds)'''; 1 = 256, and every next byte is multiples of 2 (256,512,768,...)&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 1&lt;br /&gt;
| '''Sustain (percentage)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 1&lt;br /&gt;
| '''Sustain (percentage)'''; 6.25^2&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 1&lt;br /&gt;
| '''Release time (0-255 milliseconds)''';  no multiplication is done to the value&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| 1&lt;br /&gt;
| '''Release time (256-65280 milliseconds)'''; 1 = 256, and every next byte is multiples of 2 (256,512,768,...)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The entire Pool chunk is terminated by a value of 0xFFFF.&lt;br /&gt;
&lt;br /&gt;
=== Project ===&lt;br /&gt;
&lt;br /&gt;
The Project properties chunk contains values for the sounds, including priority, polyphony, volume, etc.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Proj chunk size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}; Always 0x1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacro ID table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample ID table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Tables table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Keymaps table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Layers table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacro Settings Table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| '''Unknown Table D offset''' ''(usually 0, indicating table is not present)''&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4&lt;br /&gt;
| '''Unknown Table E offset''' ''(usually 0, indicating table is not present)''&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| colspan=2 {{unknown|End of proj header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After the header are a number of data tables. &lt;br /&gt;
&lt;br /&gt;
==== SoundMacro ID Table ====&lt;br /&gt;
&lt;br /&gt;
This is a table of shorts; there's no count value, so it's terminated with a value of 0xFFFF. It's a list of SoundMacro IDs present in the file. Occasionally there's gaps in the list; these gaps are signified by the top bit, 0x8000, being set on the size value preceding the gap.&lt;br /&gt;
&lt;br /&gt;
==== Sample ID Table ====&lt;br /&gt;
&lt;br /&gt;
This functions the same way as the SoundMacro ID table, but it contains a list sample IDs instead.&lt;br /&gt;
&lt;br /&gt;
==== SoundMacro Settings ====&lt;br /&gt;
&lt;br /&gt;
This table begins with a 16-bit count value, then 16 bits of padding. Each entry in the table is 10 bytes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| '''ID'''; referenced in [[EVNT]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| '''SoundMacro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 1&lt;br /&gt;
| '''Max number of voices'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 1&lt;br /&gt;
| '''Priority'''; voices are limited, so priority is used to play more important sounds over others&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| '''Definite Velocity'''; volume (usually 7F)&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| '''Panning'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2&lt;br /&gt;
| '''Definite Key'''; The default pitch (usually 0x3C00... the second byte may possibly be the MIDI channel)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sample ===&lt;br /&gt;
&lt;br /&gt;
The Sample chunk is all the sound data encoded using the standard Gamecube DSP ADPCM codec.  It can be decoded the same way as a [[DSP (File Format)|DSP]] file. Each sound's size is padded to 32 bytes before the next sound's data begins.&lt;br /&gt;
&lt;br /&gt;
=== Sample Directory ===&lt;br /&gt;
&lt;br /&gt;
The Sample Directory chunk (chunk 4 in Metroid Prime, chunk 3 in Metroid Prime 2) is made up of two sets of tables. The structure of both these tables is identical between both games.&lt;br /&gt;
&lt;br /&gt;
==== Table A ====&lt;br /&gt;
&lt;br /&gt;
The first metadata table has one entry per sound, and is terminated with 0xFFFFFFFF; since there's no known sound count anywhere in the file, the only way to read this correctly is to read until you reach the terminator value. Each entry is 0x20 bytes long.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sound ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| '''Padding'''; always 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sound start offset''', relative to the start of the ADPCM chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 2&lt;br /&gt;
| '''Pitch'''; stored as a half-float, always 0x3C00 (1.0)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sample rate'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Number of samples'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Loop start sample'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Loop length''', in samples. To get the loop end sample, add this to the start sample and subtract 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| '''Table B entry offset''', relative to the start of the sound metadata chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Table B ====&lt;br /&gt;
&lt;br /&gt;
These are accessed through the offsets in table A's entries; note that it might not match the sound count, because the same entry in this table can be used with multiple sounds. Each entry is 0x28 bytes long.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''; always 8}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 1&lt;br /&gt;
| '''Initial predictor/scale''' (matches first frame header)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 1&lt;br /&gt;
| '''Loop predictor/scale''' (matches loop start frame header)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''Loop context sample history 1'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| '''Loop context sample history 2'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2 &amp;amp;times; 16&lt;br /&gt;
| '''Decode coefficients'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
* [https://drive.google.com/file/d/0B9MLV21H7SDvemgwN1daYnliSjA/view?usp=sharing Prime Audio Decoder] by Parax will dump all sound effects contained in a given AGSC file.&lt;br /&gt;
&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Audio]]&lt;br /&gt;
[[Category:Metroid Prime]]&lt;br /&gt;
[[Category:Metroid Prime 2: Echoes]]&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=AGSC_(File_Format)&amp;diff=880</id>
		<title>AGSC (File Format)</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=AGSC_(File_Format)&amp;diff=880"/>
				<updated>2015-03-05T07:37:57Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: /* Tables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''AGSC''' is the sound effect format for Metroid Prime and Metroid Prime 2: Echoes. Each AGSC file contains a group of sound effects. The first two Metroid Prime games utilize the MusyX audio engine created by Factor5 and as a result, AGSC files are essentially just embedded MusyX files. &lt;br /&gt;
&lt;br /&gt;
The audio codec used in AGSC is the standard GameCube DSP ADPCM codec.  &lt;br /&gt;
&lt;br /&gt;
{{todo|Better descriptions for how SoundMacros work and a description for what each command does.}}&lt;br /&gt;
{{researchmoderate&lt;br /&gt;
|reason=The proj chunk and the sdir chunk still need some reverse-engineering.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The AGSC format is essentially four data chunks combined into one resource, each of which is a standard MusyX file. Of the four data chunks (pool, proj, samp, and sdir), there's one for sound engine scripts, one for sound properties, one for actual ADPCM sound data, and one for sound metadata. The main difference between Prime 1 and 2 is the header, and some slight changes in the way the four chunks are organized. In Metroid Prime, each chunk begins with its own size value; in Metroid Prime 2, every chunk instead has its size listed at the beginning of the file, at the end of the header. In addition, in Metroid Prime, the third chunk is samp, and the fourth is sdir; in Metroid Prime 2, it's the other way around.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
==== Metroid Prime ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| '''D'''&lt;br /&gt;
| '''Audio Directory'''. Always &amp;quot;Audio/.&amp;quot; Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 + D&lt;br /&gt;
| '''N'''&lt;br /&gt;
| '''Audio Group Name'''. Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 + D + N&lt;br /&gt;
|colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Metroid Prime 2 ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''; always 1}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| D&lt;br /&gt;
| '''Audio Group Name'''. Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Pool size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Project size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample directory size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 + D&lt;br /&gt;
| colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pool ===&lt;br /&gt;
&lt;br /&gt;
The Pool chunk contains tables for SoundMacros, ADSR, keymaps, and layers, if applicable. It starts with a 16-byte header before the different data tables begin.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacros Offset''' (always 0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Tables Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''Keymaps Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Layers Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SoundMacros ====&lt;br /&gt;
&lt;br /&gt;
The first Pool table denotes MusyX's '''SoundMacros''', small scripts that apply various effects on the sounds in the game.  Each macro is composed of a header followed by a number of commands; each command specifies its type through a single-byte command ID, then specifies the parameters of that particular command, which vary.&lt;br /&gt;
&lt;br /&gt;
The header of each SoundMacro is eight bytes, and is structured as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacro size''' ''(note: includes the size value itself)''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''SoundMacro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''; usually 0}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| colspan=2 {{unknown|Commands begin}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
On the commands, each 4 bytes were originally little endian, but have been swapped to big endian in the AGSC files (despite not being longs). To read the data as originally formatted, every four bytes needs to be byte-swapped. Each command is 8 bytes, and is structured as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| '''Command ID''' (varies; there are 79 known commands in the MusyX audio engine.)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 7&lt;br /&gt;
| '''Command arguments''' (varies between commands)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The SoundMacro will continue with commands until it terminates when the END command is executed.  The command ID for END is 0 and has null command arguments; the next SoundMacro begins after reading it. &lt;br /&gt;
&lt;br /&gt;
These are the possible commands:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! width=&amp;quot;2%&amp;quot; | ID&lt;br /&gt;
! width=&amp;quot;7%&amp;quot; | Name&lt;br /&gt;
! colspan=&amp;quot;91%&amp;quot; | Arguments&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| STOP&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| SPLITKEY&lt;br /&gt;
| Keynumber&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| SPLITVEL&lt;br /&gt;
| Velocity&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| WAIT_TICKS&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sampleend&lt;br /&gt;
| Absolute&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| LOOP&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sampleend&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Times&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| GOTO&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| WAIT_MS&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sample end&lt;br /&gt;
| Absolute&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| PLAYMACRO&lt;br /&gt;
| Addnote&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| Priority&lt;br /&gt;
| MaxVoices&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| SENDKEYOFF&lt;br /&gt;
| Variable&lt;br /&gt;
| Last started&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| SPLITMOD&lt;br /&gt;
| Mod value&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| PIANOPAN&lt;br /&gt;
| Scale&lt;br /&gt;
| Centerkey&lt;br /&gt;
| Centerpan&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| SETADSR&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (ADSR)&lt;br /&gt;
| DLS mode&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| SCALEVOLUME&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| PANNING&lt;br /&gt;
| Pan position&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Time ms&lt;br /&gt;
| Width&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| ENVELOPE&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| STARTSAMPLE&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Sample-ID&lt;br /&gt;
| Mode&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x11&lt;br /&gt;
| STOPSAMPLE&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| KEYOFF&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x13&lt;br /&gt;
| SPLITRND&lt;br /&gt;
| RND&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| FADE-IN&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| SPANNING&lt;br /&gt;
| Pan position&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Time ms&lt;br /&gt;
| Width&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| SETADSRCTRL&lt;br /&gt;
| Attack&lt;br /&gt;
| Decay&lt;br /&gt;
| Sustain&lt;br /&gt;
| Relase&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| RNDNOTE&lt;br /&gt;
| Note Lo&lt;br /&gt;
| Detune&lt;br /&gt;
| Note Hi&lt;br /&gt;
| Fixed/Free&lt;br /&gt;
| Abs/Rel&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| ADDNOTE&lt;br /&gt;
| Add&lt;br /&gt;
| Detune&lt;br /&gt;
| org key&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| SETNOTE&lt;br /&gt;
| Key&lt;br /&gt;
| Detune&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| LASTNOTE&lt;br /&gt;
| Add&lt;br /&gt;
| detune&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B&lt;br /&gt;
| PORTAMENTO&lt;br /&gt;
| Port. State&lt;br /&gt;
| Port. Type&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| VIBRATO&lt;br /&gt;
| Level note&lt;br /&gt;
| Level fine&lt;br /&gt;
| Modwheel flag&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| PITCHSWEEP1&lt;br /&gt;
| Times&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| PITCHSWEEP2&lt;br /&gt;
| Times&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| SETPITCH&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | Frequency (Hz)&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Fine&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| SETPITCHADSR&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (ADSR)&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| Note range&lt;br /&gt;
| Detune range&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| SCALEVOLUME DLS&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scale&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| MOD2VIBRANGE&lt;br /&gt;
| Key range&lt;br /&gt;
| Cent range&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x23&lt;br /&gt;
| SETUP TREMOLO&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Tremolo scale&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Modw. add scale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| RETURN&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| GOSUB&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| TRAP_EVENT&lt;br /&gt;
| Event&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| SEND_MESSAGE&lt;br /&gt;
| IsVar&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Macro&lt;br /&gt;
| VID&lt;br /&gt;
| Varibale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| GET_MESSAGE&lt;br /&gt;
| Varibale&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B&lt;br /&gt;
| GET_VID&lt;br /&gt;
| Varibale&lt;br /&gt;
| PLAY_MACRO&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| ADDAGECOUNT&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| SETAGECOUNT&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Counter&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| SENDFLAG&lt;br /&gt;
| Flag-ID&lt;br /&gt;
| Value&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| PITCHWHEELR&lt;br /&gt;
| Range up&lt;br /&gt;
| Range down&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| SETPRIORITY&lt;br /&gt;
| Prio&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| ADDPRIORITY&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| AGECNTSPEED&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | Time&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| AGECNTVEL&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | AGE Base&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | AGE Scale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| VOL_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| PAN_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| PitchW_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x43&lt;br /&gt;
| ModW_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| PEDAL_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x45&lt;br /&gt;
| PORTA_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| REVERB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x47&lt;br /&gt;
| SPAN_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| DOPPLER_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x49&lt;br /&gt;
| TREMOLO_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| PREA_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B&lt;br /&gt;
| PREB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| POSTB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4D&lt;br /&gt;
| AUXAFX_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| AUXBFX_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| SETUP_LFO&lt;br /&gt;
| LFO Nr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Period in ms&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| MODE_SELECT&lt;br /&gt;
| DLS vol&lt;br /&gt;
| ITD&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x59&lt;br /&gt;
| SET_KEYGROUP&lt;br /&gt;
| group&lt;br /&gt;
| kill&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A&lt;br /&gt;
| SRCMODE_SELECT&lt;br /&gt;
| SRC type&lt;br /&gt;
| Type 0 SRC filter&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| ADD_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B +&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x61&lt;br /&gt;
| SUB_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B -&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x62&lt;br /&gt;
| MUL_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B *&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x63&lt;br /&gt;
| DIV_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B /&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| ADDI_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B +&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Immediate&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| IF_EQUAL&lt;br /&gt;
| Ctrl&lt;br /&gt;
| A ==&lt;br /&gt;
| Ctrl&lt;br /&gt;
| B&lt;br /&gt;
| Not&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro Step&lt;br /&gt;
|-&lt;br /&gt;
| 0x71&lt;br /&gt;
| IF_LESS&lt;br /&gt;
| Ctrl&lt;br /&gt;
| A &amp;lt;&lt;br /&gt;
| Ctrl&lt;br /&gt;
| B&lt;br /&gt;
| Not&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro Step&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| END&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After the last soundmacro, the table terminated by a value of 0xFFFF.&lt;br /&gt;
&lt;br /&gt;
==== Tables ====&lt;br /&gt;
&lt;br /&gt;
'''Tables''' have two functions: for defining curves for volume scaling, or to be used as ADSR envelopes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Table size'''; (usually 0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''Table ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}; (always 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 1&lt;br /&gt;
| '''Attack time (0-255 milliseconds)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| 1&lt;br /&gt;
| '''Attack time (256-65280 milliseconds)'''; 1 = 256, and every next byte is multiples of 2 (256,512,768,...)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| 1&lt;br /&gt;
| '''Decay time (0-255 milliseconds)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| 1&lt;br /&gt;
| '''Decay time (256-65280 milliseconds)'''; 1 = 256, and every next byte is multiples of 2 (256,512,768,...)&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 1&lt;br /&gt;
| '''Sustain (percentage)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 1&lt;br /&gt;
| '''Sustain (percentage)'''; 6.25^2&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 1&lt;br /&gt;
| '''Release time (0-255 milliseconds)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| 1&lt;br /&gt;
| '''Release time (256-65280 milliseconds)'''; 1 = 256, and every next byte is multiples of 2 (256,512,768,...)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The entire Pool chunk is terminated by a value of 0xFFFF.&lt;br /&gt;
&lt;br /&gt;
=== Project ===&lt;br /&gt;
&lt;br /&gt;
The Project properties chunk contains values for the sounds, including priority, polyphony, volume, etc.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Proj chunk size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}; Always 0x1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacro ID table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample ID table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Tables table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Keymaps table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Layers table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacro Settings Table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| '''Unknown Table D offset''' ''(usually 0, indicating table is not present)''&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4&lt;br /&gt;
| '''Unknown Table E offset''' ''(usually 0, indicating table is not present)''&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| colspan=2 {{unknown|End of proj header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After the header are a number of data tables. &lt;br /&gt;
&lt;br /&gt;
==== SoundMacro ID Table ====&lt;br /&gt;
&lt;br /&gt;
This is a table of shorts; there's no count value, so it's terminated with a value of 0xFFFF. It's a list of SoundMacro IDs present in the file. Occasionally there's gaps in the list; these gaps are signified by the top bit, 0x8000, being set on the size value preceding the gap.&lt;br /&gt;
&lt;br /&gt;
==== Sample ID Table ====&lt;br /&gt;
&lt;br /&gt;
This functions the same way as the SoundMacro ID table, but it contains a list sample IDs instead.&lt;br /&gt;
&lt;br /&gt;
==== SoundMacro Settings ====&lt;br /&gt;
&lt;br /&gt;
This table begins with a 16-bit count value, then 16 bits of padding. Each entry in the table is 10 bytes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| '''ID'''; referenced in [[EVNT]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| '''SoundMacro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 1&lt;br /&gt;
| '''Max number of voices'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 1&lt;br /&gt;
| '''Priority'''; voices are limited, so priority is used to play more important sounds over others&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| '''Definite Velocity'''; volume (usually 7F)&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| '''Panning'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2&lt;br /&gt;
| '''Definite Key'''; The default pitch (usually 0x3C00... the second byte may possibly be the MIDI channel)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sample ===&lt;br /&gt;
&lt;br /&gt;
The Sample chunk is all the sound data encoded using the standard Gamecube DSP ADPCM codec.  It can be decoded the same way as a [[DSP (File Format)|DSP]] file. Each sound's size is padded to 32 bytes before the next sound's data begins.&lt;br /&gt;
&lt;br /&gt;
=== Sample Directory ===&lt;br /&gt;
&lt;br /&gt;
The Sample Directory chunk (chunk 4 in Metroid Prime, chunk 3 in Metroid Prime 2) is made up of two sets of tables. The structure of both these tables is identical between both games.&lt;br /&gt;
&lt;br /&gt;
==== Table A ====&lt;br /&gt;
&lt;br /&gt;
The first metadata table has one entry per sound, and is terminated with 0xFFFFFFFF; since there's no known sound count anywhere in the file, the only way to read this correctly is to read until you reach the terminator value. Each entry is 0x20 bytes long.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sound ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| '''Padding'''; always 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sound start offset''', relative to the start of the ADPCM chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 2&lt;br /&gt;
| '''Pitch'''; stored as a half-float, always 0x3C00 (1.0)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sample rate'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Number of samples'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Loop start sample'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Loop length''', in samples. To get the loop end sample, add this to the start sample and subtract 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| '''Table B entry offset''', relative to the start of the sound metadata chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Table B ====&lt;br /&gt;
&lt;br /&gt;
These are accessed through the offsets in table A's entries; note that it might not match the sound count, because the same entry in this table can be used with multiple sounds. Each entry is 0x28 bytes long.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''; always 8}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 1&lt;br /&gt;
| '''Initial predictor/scale''' (matches first frame header)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 1&lt;br /&gt;
| '''Loop predictor/scale''' (matches loop start frame header)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''Loop context sample history 1'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| '''Loop context sample history 2'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2 &amp;amp;times; 16&lt;br /&gt;
| '''Decode coefficients'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
* [https://drive.google.com/file/d/0B9MLV21H7SDvemgwN1daYnliSjA/view?usp=sharing Prime Audio Decoder] by Parax will dump all sound effects contained in a given AGSC file.&lt;br /&gt;
&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Audio]]&lt;br /&gt;
[[Category:Metroid Prime]]&lt;br /&gt;
[[Category:Metroid Prime 2: Echoes]]&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=AGSC_(File_Format)&amp;diff=879</id>
		<title>AGSC (File Format)</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=AGSC_(File_Format)&amp;diff=879"/>
				<updated>2015-03-05T07:33:32Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: /* Tables */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''AGSC''' is the sound effect format for Metroid Prime and Metroid Prime 2: Echoes. Each AGSC file contains a group of sound effects. The first two Metroid Prime games utilize the MusyX audio engine created by Factor5 and as a result, AGSC files are essentially just embedded MusyX files. &lt;br /&gt;
&lt;br /&gt;
The audio codec used in AGSC is the standard GameCube DSP ADPCM codec.  &lt;br /&gt;
&lt;br /&gt;
{{todo|Better descriptions for how SoundMacros work and a description for what each command does.}}&lt;br /&gt;
{{researchmoderate&lt;br /&gt;
|reason=The proj chunk and the sdir chunk still need some reverse-engineering.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The AGSC format is essentially four data chunks combined into one resource, each of which is a standard MusyX file. Of the four data chunks (pool, proj, samp, and sdir), there's one for sound engine scripts, one for sound properties, one for actual ADPCM sound data, and one for sound metadata. The main difference between Prime 1 and 2 is the header, and some slight changes in the way the four chunks are organized. In Metroid Prime, each chunk begins with its own size value; in Metroid Prime 2, every chunk instead has its size listed at the beginning of the file, at the end of the header. In addition, in Metroid Prime, the third chunk is samp, and the fourth is sdir; in Metroid Prime 2, it's the other way around.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
==== Metroid Prime ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| '''D'''&lt;br /&gt;
| '''Audio Directory'''. Always &amp;quot;Audio/.&amp;quot; Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 + D&lt;br /&gt;
| '''N'''&lt;br /&gt;
| '''Audio Group Name'''. Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 + D + N&lt;br /&gt;
|colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Metroid Prime 2 ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''; always 1}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| D&lt;br /&gt;
| '''Audio Group Name'''. Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Pool size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Project size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample directory size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 + D&lt;br /&gt;
| colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pool ===&lt;br /&gt;
&lt;br /&gt;
The Pool chunk contains tables for SoundMacros, ADSR, keymaps, and layers, if applicable. It starts with a 16-byte header before the different data tables begin.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacros Offset''' (always 0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Tables Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''Keymaps Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Layers Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SoundMacros ====&lt;br /&gt;
&lt;br /&gt;
The first Pool table denotes MusyX's '''SoundMacros''', small scripts that apply various effects on the sounds in the game.  Each macro is composed of a header followed by a number of commands; each command specifies its type through a single-byte command ID, then specifies the parameters of that particular command, which vary.&lt;br /&gt;
&lt;br /&gt;
The header of each SoundMacro is eight bytes, and is structured as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacro size''' ''(note: includes the size value itself)''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''SoundMacro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''; usually 0}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| colspan=2 {{unknown|Commands begin}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
On the commands, each 4 bytes were originally little endian, but have been swapped to big endian in the AGSC files (despite not being longs). To read the data as originally formatted, every four bytes needs to be byte-swapped. Each command is 8 bytes, and is structured as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| '''Command ID''' (varies; there are 79 known commands in the MusyX audio engine.)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 7&lt;br /&gt;
| '''Command arguments''' (varies between commands)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The SoundMacro will continue with commands until it terminates when the END command is executed.  The command ID for END is 0 and has null command arguments; the next SoundMacro begins after reading it. &lt;br /&gt;
&lt;br /&gt;
These are the possible commands:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! width=&amp;quot;2%&amp;quot; | ID&lt;br /&gt;
! width=&amp;quot;7%&amp;quot; | Name&lt;br /&gt;
! colspan=&amp;quot;91%&amp;quot; | Arguments&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| STOP&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| SPLITKEY&lt;br /&gt;
| Keynumber&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| SPLITVEL&lt;br /&gt;
| Velocity&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| WAIT_TICKS&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sampleend&lt;br /&gt;
| Absolute&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| LOOP&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sampleend&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Times&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| GOTO&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| WAIT_MS&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sample end&lt;br /&gt;
| Absolute&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| PLAYMACRO&lt;br /&gt;
| Addnote&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| Priority&lt;br /&gt;
| MaxVoices&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| SENDKEYOFF&lt;br /&gt;
| Variable&lt;br /&gt;
| Last started&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| SPLITMOD&lt;br /&gt;
| Mod value&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| PIANOPAN&lt;br /&gt;
| Scale&lt;br /&gt;
| Centerkey&lt;br /&gt;
| Centerpan&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| SETADSR&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (ADSR)&lt;br /&gt;
| DLS mode&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| SCALEVOLUME&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| PANNING&lt;br /&gt;
| Pan position&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Time ms&lt;br /&gt;
| Width&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| ENVELOPE&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| STARTSAMPLE&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Sample-ID&lt;br /&gt;
| Mode&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x11&lt;br /&gt;
| STOPSAMPLE&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| KEYOFF&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x13&lt;br /&gt;
| SPLITRND&lt;br /&gt;
| RND&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| FADE-IN&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| SPANNING&lt;br /&gt;
| Pan position&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Time ms&lt;br /&gt;
| Width&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| SETADSRCTRL&lt;br /&gt;
| Attack&lt;br /&gt;
| Decay&lt;br /&gt;
| Sustain&lt;br /&gt;
| Relase&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| RNDNOTE&lt;br /&gt;
| Note Lo&lt;br /&gt;
| Detune&lt;br /&gt;
| Note Hi&lt;br /&gt;
| Fixed/Free&lt;br /&gt;
| Abs/Rel&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| ADDNOTE&lt;br /&gt;
| Add&lt;br /&gt;
| Detune&lt;br /&gt;
| org key&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| SETNOTE&lt;br /&gt;
| Key&lt;br /&gt;
| Detune&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| LASTNOTE&lt;br /&gt;
| Add&lt;br /&gt;
| detune&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B&lt;br /&gt;
| PORTAMENTO&lt;br /&gt;
| Port. State&lt;br /&gt;
| Port. Type&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| VIBRATO&lt;br /&gt;
| Level note&lt;br /&gt;
| Level fine&lt;br /&gt;
| Modwheel flag&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| PITCHSWEEP1&lt;br /&gt;
| Times&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| PITCHSWEEP2&lt;br /&gt;
| Times&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| SETPITCH&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | Frequency (Hz)&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Fine&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| SETPITCHADSR&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (ADSR)&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| Note range&lt;br /&gt;
| Detune range&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| SCALEVOLUME DLS&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scale&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| MOD2VIBRANGE&lt;br /&gt;
| Key range&lt;br /&gt;
| Cent range&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x23&lt;br /&gt;
| SETUP TREMOLO&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Tremolo scale&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Modw. add scale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| RETURN&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| GOSUB&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| TRAP_EVENT&lt;br /&gt;
| Event&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| SEND_MESSAGE&lt;br /&gt;
| IsVar&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Macro&lt;br /&gt;
| VID&lt;br /&gt;
| Varibale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| GET_MESSAGE&lt;br /&gt;
| Varibale&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B&lt;br /&gt;
| GET_VID&lt;br /&gt;
| Varibale&lt;br /&gt;
| PLAY_MACRO&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| ADDAGECOUNT&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| SETAGECOUNT&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Counter&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| SENDFLAG&lt;br /&gt;
| Flag-ID&lt;br /&gt;
| Value&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| PITCHWHEELR&lt;br /&gt;
| Range up&lt;br /&gt;
| Range down&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| SETPRIORITY&lt;br /&gt;
| Prio&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| ADDPRIORITY&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| AGECNTSPEED&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | Time&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| AGECNTVEL&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | AGE Base&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | AGE Scale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| VOL_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| PAN_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| PitchW_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x43&lt;br /&gt;
| ModW_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| PEDAL_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x45&lt;br /&gt;
| PORTA_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| REVERB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x47&lt;br /&gt;
| SPAN_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| DOPPLER_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x49&lt;br /&gt;
| TREMOLO_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| PREA_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B&lt;br /&gt;
| PREB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| POSTB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4D&lt;br /&gt;
| AUXAFX_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| AUXBFX_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| SETUP_LFO&lt;br /&gt;
| LFO Nr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Period in ms&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| MODE_SELECT&lt;br /&gt;
| DLS vol&lt;br /&gt;
| ITD&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x59&lt;br /&gt;
| SET_KEYGROUP&lt;br /&gt;
| group&lt;br /&gt;
| kill&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A&lt;br /&gt;
| SRCMODE_SELECT&lt;br /&gt;
| SRC type&lt;br /&gt;
| Type 0 SRC filter&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| ADD_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B +&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x61&lt;br /&gt;
| SUB_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B -&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x62&lt;br /&gt;
| MUL_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B *&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x63&lt;br /&gt;
| DIV_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B /&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| ADDI_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B +&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Immediate&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| IF_EQUAL&lt;br /&gt;
| Ctrl&lt;br /&gt;
| A ==&lt;br /&gt;
| Ctrl&lt;br /&gt;
| B&lt;br /&gt;
| Not&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro Step&lt;br /&gt;
|-&lt;br /&gt;
| 0x71&lt;br /&gt;
| IF_LESS&lt;br /&gt;
| Ctrl&lt;br /&gt;
| A &amp;lt;&lt;br /&gt;
| Ctrl&lt;br /&gt;
| B&lt;br /&gt;
| Not&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro Step&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| END&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After the last soundmacro, the table terminated by a value of 0xFFFF.&lt;br /&gt;
&lt;br /&gt;
==== Tables ====&lt;br /&gt;
&lt;br /&gt;
'''Tables''' have two functions: for defining curves for volume scaling, or to be used as ADSR envelopes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Table size'''; (usually 0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''Table ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}; (always 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 1&lt;br /&gt;
| '''Attack time (0-255 milliseconds)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| 1&lt;br /&gt;
| '''Attack time (256-65280 milliseconds)'''; 1 = 256, and every next byte is multiples of 2 (256,512,768,...)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| 1&lt;br /&gt;
| '''Decay time (0-255 milliseconds)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| 1&lt;br /&gt;
| '''Decay time (256-65280 milliseconds)'''; 1 = 256, and every next byte is multiples of 2 (256,512,768,...)&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 1&lt;br /&gt;
| '''Sustain (percentage)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 1&lt;br /&gt;
| '''Sustain (percentage)'''; 6.25^2&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 1&lt;br /&gt;
| '''Release time (0-255 milliseconds)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| 1&lt;br /&gt;
| '''Release time (256-65280 milliseconds)'''; 1 = 256, and every next byte is multiples of 2 (256,512,768,...)&lt;br /&gt;
| 0x10&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The entire Pool chunk is terminated by a value of 0xFFFF.&lt;br /&gt;
&lt;br /&gt;
=== Project ===&lt;br /&gt;
&lt;br /&gt;
The Project properties chunk contains values for the sounds, including priority, polyphony, volume, etc.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Proj chunk size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}; Always 0x1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacro ID table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample ID table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Tables table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Keymaps table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Layers table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacro Settings Table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| '''Unknown Table D offset''' ''(usually 0, indicating table is not present)''&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4&lt;br /&gt;
| '''Unknown Table E offset''' ''(usually 0, indicating table is not present)''&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| colspan=2 {{unknown|End of proj header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After the header are a number of data tables. &lt;br /&gt;
&lt;br /&gt;
==== SoundMacro ID Table ====&lt;br /&gt;
&lt;br /&gt;
This is a table of shorts; there's no count value, so it's terminated with a value of 0xFFFF. It's a list of SoundMacro IDs present in the file. Occasionally there's gaps in the list; these gaps are signified by the top bit, 0x8000, being set on the size value preceding the gap.&lt;br /&gt;
&lt;br /&gt;
==== Sample ID Table ====&lt;br /&gt;
&lt;br /&gt;
This functions the same way as the SoundMacro ID table, but it contains a list sample IDs instead.&lt;br /&gt;
&lt;br /&gt;
==== SoundMacro Settings ====&lt;br /&gt;
&lt;br /&gt;
This table begins with a 16-bit count value, then 16 bits of padding. Each entry in the table is 10 bytes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| '''ID'''; referenced in [[EVNT]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| '''SoundMacro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 1&lt;br /&gt;
| '''Max number of voices'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 1&lt;br /&gt;
| '''Priority'''; voices are limited, so priority is used to play more important sounds over others&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| '''Definite Velocity'''; volume (usually 7F)&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| '''Panning'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2&lt;br /&gt;
| '''Definite Key'''; The default pitch (usually 0x3C00... the second byte may possibly be the MIDI channel)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sample ===&lt;br /&gt;
&lt;br /&gt;
The Sample chunk is all the sound data encoded using the standard Gamecube DSP ADPCM codec.  It can be decoded the same way as a [[DSP (File Format)|DSP]] file. Each sound's size is padded to 32 bytes before the next sound's data begins.&lt;br /&gt;
&lt;br /&gt;
=== Sample Directory ===&lt;br /&gt;
&lt;br /&gt;
The Sample Directory chunk (chunk 4 in Metroid Prime, chunk 3 in Metroid Prime 2) is made up of two sets of tables. The structure of both these tables is identical between both games.&lt;br /&gt;
&lt;br /&gt;
==== Table A ====&lt;br /&gt;
&lt;br /&gt;
The first metadata table has one entry per sound, and is terminated with 0xFFFFFFFF; since there's no known sound count anywhere in the file, the only way to read this correctly is to read until you reach the terminator value. Each entry is 0x20 bytes long.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sound ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| '''Padding'''; always 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sound start offset''', relative to the start of the ADPCM chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 2&lt;br /&gt;
| '''Pitch'''; stored as a half-float, always 0x3C00 (1.0)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sample rate'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Number of samples'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Loop start sample'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Loop length''', in samples. To get the loop end sample, add this to the start sample and subtract 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| '''Table B entry offset''', relative to the start of the sound metadata chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Table B ====&lt;br /&gt;
&lt;br /&gt;
These are accessed through the offsets in table A's entries; note that it might not match the sound count, because the same entry in this table can be used with multiple sounds. Each entry is 0x28 bytes long.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''; always 8}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 1&lt;br /&gt;
| '''Initial predictor/scale''' (matches first frame header)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 1&lt;br /&gt;
| '''Loop predictor/scale''' (matches loop start frame header)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''Loop context sample history 1'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| '''Loop context sample history 2'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2 &amp;amp;times; 16&lt;br /&gt;
| '''Decode coefficients'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
* [https://drive.google.com/file/d/0B9MLV21H7SDvemgwN1daYnliSjA/view?usp=sharing Prime Audio Decoder] by Parax will dump all sound effects contained in a given AGSC file.&lt;br /&gt;
&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Audio]]&lt;br /&gt;
[[Category:Metroid Prime]]&lt;br /&gt;
[[Category:Metroid Prime 2: Echoes]]&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=AGSC_(File_Format)&amp;diff=878</id>
		<title>AGSC (File Format)</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=AGSC_(File_Format)&amp;diff=878"/>
				<updated>2015-03-05T07:20:04Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: /* Pool */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''AGSC''' is the sound effect format for Metroid Prime and Metroid Prime 2: Echoes. Each AGSC file contains a group of sound effects. The first two Metroid Prime games utilize the MusyX audio engine created by Factor5 and as a result, AGSC files are essentially just embedded MusyX files. &lt;br /&gt;
&lt;br /&gt;
The audio codec used in AGSC is the standard GameCube DSP ADPCM codec.  &lt;br /&gt;
&lt;br /&gt;
{{todo|Better descriptions for how SoundMacros work and a description for what each command does.}}&lt;br /&gt;
{{researchmoderate&lt;br /&gt;
|reason=The proj chunk and the sdir chunk still need some reverse-engineering.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The AGSC format is essentially four data chunks combined into one resource, each of which is a standard MusyX file. Of the four data chunks (pool, proj, samp, and sdir), there's one for sound engine scripts, one for sound properties, one for actual ADPCM sound data, and one for sound metadata. The main difference between Prime 1 and 2 is the header, and some slight changes in the way the four chunks are organized. In Metroid Prime, each chunk begins with its own size value; in Metroid Prime 2, every chunk instead has its size listed at the beginning of the file, at the end of the header. In addition, in Metroid Prime, the third chunk is samp, and the fourth is sdir; in Metroid Prime 2, it's the other way around.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
==== Metroid Prime ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| '''D'''&lt;br /&gt;
| '''Audio Directory'''. Always &amp;quot;Audio/.&amp;quot; Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 + D&lt;br /&gt;
| '''N'''&lt;br /&gt;
| '''Audio Group Name'''. Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 + D + N&lt;br /&gt;
|colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Metroid Prime 2 ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''; always 1}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| D&lt;br /&gt;
| '''Audio Group Name'''. Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Pool size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Project size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample directory size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 + D&lt;br /&gt;
| colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pool ===&lt;br /&gt;
&lt;br /&gt;
The Pool chunk contains tables for SoundMacros, ADSR, keymaps, and layers, if applicable. It starts with a 16-byte header before the different data tables begin.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacros Offset''' (always 0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Tables Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''Keymaps Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Layers Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SoundMacros ====&lt;br /&gt;
&lt;br /&gt;
The first Pool table denotes MusyX's '''SoundMacros''', small scripts that apply various effects on the sounds in the game.  Each macro is composed of a header followed by a number of commands; each command specifies its type through a single-byte command ID, then specifies the parameters of that particular command, which vary.&lt;br /&gt;
&lt;br /&gt;
The header of each SoundMacro is eight bytes, and is structured as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacro size''' ''(note: includes the size value itself)''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''SoundMacro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''; usually 0}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| colspan=2 {{unknown|Commands begin}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
On the commands, each 4 bytes were originally little endian, but have been swapped to big endian in the AGSC files (despite not being longs). To read the data as originally formatted, every four bytes needs to be byte-swapped. Each command is 8 bytes, and is structured as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| '''Command ID''' (varies; there are 79 known commands in the MusyX audio engine.)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 7&lt;br /&gt;
| '''Command arguments''' (varies between commands)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The SoundMacro will continue with commands until it terminates when the END command is executed.  The command ID for END is 0 and has null command arguments; the next SoundMacro begins after reading it. &lt;br /&gt;
&lt;br /&gt;
These are the possible commands:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! width=&amp;quot;2%&amp;quot; | ID&lt;br /&gt;
! width=&amp;quot;7%&amp;quot; | Name&lt;br /&gt;
! colspan=&amp;quot;91%&amp;quot; | Arguments&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| STOP&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| SPLITKEY&lt;br /&gt;
| Keynumber&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| SPLITVEL&lt;br /&gt;
| Velocity&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| WAIT_TICKS&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sampleend&lt;br /&gt;
| Absolute&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| LOOP&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sampleend&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Times&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| GOTO&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| WAIT_MS&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sample end&lt;br /&gt;
| Absolute&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| PLAYMACRO&lt;br /&gt;
| Addnote&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| Priority&lt;br /&gt;
| MaxVoices&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| SENDKEYOFF&lt;br /&gt;
| Variable&lt;br /&gt;
| Last started&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| SPLITMOD&lt;br /&gt;
| Mod value&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| PIANOPAN&lt;br /&gt;
| Scale&lt;br /&gt;
| Centerkey&lt;br /&gt;
| Centerpan&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| SETADSR&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (ADSR)&lt;br /&gt;
| DLS mode&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| SCALEVOLUME&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| PANNING&lt;br /&gt;
| Pan position&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Time ms&lt;br /&gt;
| Width&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| ENVELOPE&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| STARTSAMPLE&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Sample-ID&lt;br /&gt;
| Mode&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x11&lt;br /&gt;
| STOPSAMPLE&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| KEYOFF&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x13&lt;br /&gt;
| SPLITRND&lt;br /&gt;
| RND&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| FADE-IN&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| SPANNING&lt;br /&gt;
| Pan position&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Time ms&lt;br /&gt;
| Width&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| SETADSRCTRL&lt;br /&gt;
| Attack&lt;br /&gt;
| Decay&lt;br /&gt;
| Sustain&lt;br /&gt;
| Relase&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| RNDNOTE&lt;br /&gt;
| Note Lo&lt;br /&gt;
| Detune&lt;br /&gt;
| Note Hi&lt;br /&gt;
| Fixed/Free&lt;br /&gt;
| Abs/Rel&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| ADDNOTE&lt;br /&gt;
| Add&lt;br /&gt;
| Detune&lt;br /&gt;
| org key&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| SETNOTE&lt;br /&gt;
| Key&lt;br /&gt;
| Detune&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| LASTNOTE&lt;br /&gt;
| Add&lt;br /&gt;
| detune&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B&lt;br /&gt;
| PORTAMENTO&lt;br /&gt;
| Port. State&lt;br /&gt;
| Port. Type&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| VIBRATO&lt;br /&gt;
| Level note&lt;br /&gt;
| Level fine&lt;br /&gt;
| Modwheel flag&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| PITCHSWEEP1&lt;br /&gt;
| Times&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| PITCHSWEEP2&lt;br /&gt;
| Times&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| SETPITCH&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | Frequency (Hz)&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Fine&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| SETPITCHADSR&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (ADSR)&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| Note range&lt;br /&gt;
| Detune range&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| SCALEVOLUME DLS&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scale&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| MOD2VIBRANGE&lt;br /&gt;
| Key range&lt;br /&gt;
| Cent range&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x23&lt;br /&gt;
| SETUP TREMOLO&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Tremolo scale&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Modw. add scale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| RETURN&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| GOSUB&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| TRAP_EVENT&lt;br /&gt;
| Event&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| SEND_MESSAGE&lt;br /&gt;
| IsVar&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Macro&lt;br /&gt;
| VID&lt;br /&gt;
| Varibale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| GET_MESSAGE&lt;br /&gt;
| Varibale&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B&lt;br /&gt;
| GET_VID&lt;br /&gt;
| Varibale&lt;br /&gt;
| PLAY_MACRO&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| ADDAGECOUNT&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| SETAGECOUNT&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Counter&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| SENDFLAG&lt;br /&gt;
| Flag-ID&lt;br /&gt;
| Value&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| PITCHWHEELR&lt;br /&gt;
| Range up&lt;br /&gt;
| Range down&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| SETPRIORITY&lt;br /&gt;
| Prio&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| ADDPRIORITY&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| AGECNTSPEED&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | Time&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| AGECNTVEL&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | AGE Base&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | AGE Scale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| VOL_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| PAN_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| PitchW_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x43&lt;br /&gt;
| ModW_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| PEDAL_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x45&lt;br /&gt;
| PORTA_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| REVERB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x47&lt;br /&gt;
| SPAN_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| DOPPLER_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x49&lt;br /&gt;
| TREMOLO_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| PREA_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B&lt;br /&gt;
| PREB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| POSTB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4D&lt;br /&gt;
| AUXAFX_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| AUXBFX_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| SETUP_LFO&lt;br /&gt;
| LFO Nr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Period in ms&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| MODE_SELECT&lt;br /&gt;
| DLS vol&lt;br /&gt;
| ITD&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x59&lt;br /&gt;
| SET_KEYGROUP&lt;br /&gt;
| group&lt;br /&gt;
| kill&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A&lt;br /&gt;
| SRCMODE_SELECT&lt;br /&gt;
| SRC type&lt;br /&gt;
| Type 0 SRC filter&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| ADD_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B +&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x61&lt;br /&gt;
| SUB_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B -&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x62&lt;br /&gt;
| MUL_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B *&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x63&lt;br /&gt;
| DIV_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B /&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| ADDI_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B +&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Immediate&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| IF_EQUAL&lt;br /&gt;
| Ctrl&lt;br /&gt;
| A ==&lt;br /&gt;
| Ctrl&lt;br /&gt;
| B&lt;br /&gt;
| Not&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro Step&lt;br /&gt;
|-&lt;br /&gt;
| 0x71&lt;br /&gt;
| IF_LESS&lt;br /&gt;
| Ctrl&lt;br /&gt;
| A &amp;lt;&lt;br /&gt;
| Ctrl&lt;br /&gt;
| B&lt;br /&gt;
| Not&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro Step&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| END&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After the last soundmacro, the table terminated by a value of 0xFFFF.&lt;br /&gt;
&lt;br /&gt;
==== Tables ====&lt;br /&gt;
&lt;br /&gt;
'''Tables''' have two functions: for defining curves for volume scaling, or to be used as ADSR envelopes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Table size'''; (usually 0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''Table ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}; (always 0)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 1&lt;br /&gt;
| '''Attack time (0-255 milliseconds)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| 1&lt;br /&gt;
| '''Attack time (256-65280 milliseconds)'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The entire Pool chunk is terminated by a value of 0xFFFF.&lt;br /&gt;
&lt;br /&gt;
=== Project ===&lt;br /&gt;
&lt;br /&gt;
The Project properties chunk contains values for the sounds, including priority, polyphony, volume, etc.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Proj chunk size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}; Always 0x1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacro ID table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample ID table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Tables table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Keymaps table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Layers table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacro Settings Table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| '''Unknown Table D offset''' ''(usually 0, indicating table is not present)''&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4&lt;br /&gt;
| '''Unknown Table E offset''' ''(usually 0, indicating table is not present)''&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| colspan=2 {{unknown|End of proj header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After the header are a number of data tables. &lt;br /&gt;
&lt;br /&gt;
==== SoundMacro ID Table ====&lt;br /&gt;
&lt;br /&gt;
This is a table of shorts; there's no count value, so it's terminated with a value of 0xFFFF. It's a list of SoundMacro IDs present in the file. Occasionally there's gaps in the list; these gaps are signified by the top bit, 0x8000, being set on the size value preceding the gap.&lt;br /&gt;
&lt;br /&gt;
==== Sample ID Table ====&lt;br /&gt;
&lt;br /&gt;
This functions the same way as the SoundMacro ID table, but it contains a list sample IDs instead.&lt;br /&gt;
&lt;br /&gt;
==== SoundMacro Settings ====&lt;br /&gt;
&lt;br /&gt;
This table begins with a 16-bit count value, then 16 bits of padding. Each entry in the table is 10 bytes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| '''ID'''; referenced in [[EVNT]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| '''SoundMacro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 1&lt;br /&gt;
| '''Max number of voices'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 1&lt;br /&gt;
| '''Priority'''; voices are limited, so priority is used to play more important sounds over others&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| '''Definite Velocity'''; volume (usually 7F)&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| '''Panning'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2&lt;br /&gt;
| '''Definite Key'''; The default pitch (usually 0x3C00... the second byte may possibly be the MIDI channel)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sample ===&lt;br /&gt;
&lt;br /&gt;
The Sample chunk is all the sound data encoded using the standard Gamecube DSP ADPCM codec.  It can be decoded the same way as a [[DSP (File Format)|DSP]] file. Each sound's size is padded to 32 bytes before the next sound's data begins.&lt;br /&gt;
&lt;br /&gt;
=== Sample Directory ===&lt;br /&gt;
&lt;br /&gt;
The Sample Directory chunk (chunk 4 in Metroid Prime, chunk 3 in Metroid Prime 2) is made up of two sets of tables. The structure of both these tables is identical between both games.&lt;br /&gt;
&lt;br /&gt;
==== Table A ====&lt;br /&gt;
&lt;br /&gt;
The first metadata table has one entry per sound, and is terminated with 0xFFFFFFFF; since there's no known sound count anywhere in the file, the only way to read this correctly is to read until you reach the terminator value. Each entry is 0x20 bytes long.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sound ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| '''Padding'''; always 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sound start offset''', relative to the start of the ADPCM chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 2&lt;br /&gt;
| '''Pitch'''; stored as a half-float, always 0x3C00 (1.0)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sample rate'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Number of samples'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Loop start sample'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Loop length''', in samples. To get the loop end sample, add this to the start sample and subtract 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| '''Table B entry offset''', relative to the start of the sound metadata chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Table B ====&lt;br /&gt;
&lt;br /&gt;
These are accessed through the offsets in table A's entries; note that it might not match the sound count, because the same entry in this table can be used with multiple sounds. Each entry is 0x28 bytes long.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''; always 8}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 1&lt;br /&gt;
| '''Initial predictor/scale''' (matches first frame header)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 1&lt;br /&gt;
| '''Loop predictor/scale''' (matches loop start frame header)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''Loop context sample history 1'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| '''Loop context sample history 2'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2 &amp;amp;times; 16&lt;br /&gt;
| '''Decode coefficients'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
* [https://drive.google.com/file/d/0B9MLV21H7SDvemgwN1daYnliSjA/view?usp=sharing Prime Audio Decoder] by Parax will dump all sound effects contained in a given AGSC file.&lt;br /&gt;
&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Audio]]&lt;br /&gt;
[[Category:Metroid Prime]]&lt;br /&gt;
[[Category:Metroid Prime 2: Echoes]]&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=AGSC_(File_Format)&amp;diff=877</id>
		<title>AGSC (File Format)</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=AGSC_(File_Format)&amp;diff=877"/>
				<updated>2015-03-05T07:04:21Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: /* SoundMacros */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''AGSC''' is the sound effect format for Metroid Prime and Metroid Prime 2: Echoes. Each AGSC file contains a group of sound effects. The first two Metroid Prime games utilize the MusyX audio engine created by Factor5 and as a result, AGSC files are essentially just embedded MusyX files. &lt;br /&gt;
&lt;br /&gt;
The audio codec used in AGSC is the standard GameCube DSP ADPCM codec.  &lt;br /&gt;
&lt;br /&gt;
{{todo|Better descriptions for how SoundMacros work and a description for what each command does.}}&lt;br /&gt;
{{researchmoderate&lt;br /&gt;
|reason=The proj chunk and the sdir chunk still need some reverse-engineering.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The AGSC format is essentially four data chunks combined into one resource, each of which is a standard MusyX file. Of the four data chunks (pool, proj, samp, and sdir), there's one for sound engine scripts, one for sound properties, one for actual ADPCM sound data, and one for sound metadata. The main difference between Prime 1 and 2 is the header, and some slight changes in the way the four chunks are organized. In Metroid Prime, each chunk begins with its own size value; in Metroid Prime 2, every chunk instead has its size listed at the beginning of the file, at the end of the header. In addition, in Metroid Prime, the third chunk is samp, and the fourth is sdir; in Metroid Prime 2, it's the other way around.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
==== Metroid Prime ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| '''D'''&lt;br /&gt;
| '''Audio Directory'''. Always &amp;quot;Audio/.&amp;quot; Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 + D&lt;br /&gt;
| '''N'''&lt;br /&gt;
| '''Audio Group Name'''. Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 + D + N&lt;br /&gt;
|colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Metroid Prime 2 ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''; always 1}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| D&lt;br /&gt;
| '''Audio Group Name'''. Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Pool size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Project size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample directory size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 + D&lt;br /&gt;
| colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pool ===&lt;br /&gt;
&lt;br /&gt;
The Pool chunk contains tables for SoundMacros, ADSR, keymaps, and layers, if applicable. It starts with a 16-byte header before the different data tables begin.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacros Offset''' (always 0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Tables Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''Keymaps Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Layers Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SoundMacros ====&lt;br /&gt;
&lt;br /&gt;
The first Pool table denotes MusyX's '''SoundMacros''', small scripts that apply various effects on the sounds in the game.  Each macro is composed of a header followed by a number of commands; each command specifies its type through a single-byte command ID, then specifies the parameters of that particular command, which vary.&lt;br /&gt;
&lt;br /&gt;
The header of each SoundMacro is eight bytes, and is structured as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacro size''' ''(note: includes the size value itself)''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''SoundMacro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''; usually 0}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| colspan=2 {{unknown|Commands begin}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
On the commands, each 4 bytes were originally little endian, but have been swapped to big endian in the AGSC files (despite not being longs). To read the data as originally formatted, every four bytes needs to be byte-swapped. Each command is 8 bytes, and is structured as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| '''Command ID''' (varies; there are 79 known commands in the MusyX audio engine.)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 7&lt;br /&gt;
| '''Command arguments''' (varies between commands)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The SoundMacro will continue with commands until it terminates when the END command is executed.  The command ID for END is 0 and has null command arguments; the next SoundMacro begins after reading it. &lt;br /&gt;
&lt;br /&gt;
These are the possible commands:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! width=&amp;quot;2%&amp;quot; | ID&lt;br /&gt;
! width=&amp;quot;7%&amp;quot; | Name&lt;br /&gt;
! colspan=&amp;quot;91%&amp;quot; | Arguments&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| STOP&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| SPLITKEY&lt;br /&gt;
| Keynumber&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| SPLITVEL&lt;br /&gt;
| Velocity&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| WAIT_TICKS&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sampleend&lt;br /&gt;
| Absolute&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| LOOP&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sampleend&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Times&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| GOTO&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| WAIT_MS&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sample end&lt;br /&gt;
| Absolute&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| PLAYMACRO&lt;br /&gt;
| Addnote&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| Priority&lt;br /&gt;
| MaxVoices&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| SENDKEYOFF&lt;br /&gt;
| Variable&lt;br /&gt;
| Last started&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| SPLITMOD&lt;br /&gt;
| Mod value&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| PIANOPAN&lt;br /&gt;
| Scale&lt;br /&gt;
| Centerkey&lt;br /&gt;
| Centerpan&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| SETADSR&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (ADSR)&lt;br /&gt;
| DLS mode&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| SCALEVOLUME&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| PANNING&lt;br /&gt;
| Pan position&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Time ms&lt;br /&gt;
| Width&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| ENVELOPE&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| STARTSAMPLE&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Sample-ID&lt;br /&gt;
| Mode&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x11&lt;br /&gt;
| STOPSAMPLE&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| KEYOFF&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x13&lt;br /&gt;
| SPLITRND&lt;br /&gt;
| RND&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| FADE-IN&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| SPANNING&lt;br /&gt;
| Pan position&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Time ms&lt;br /&gt;
| Width&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| SETADSRCTRL&lt;br /&gt;
| Attack&lt;br /&gt;
| Decay&lt;br /&gt;
| Sustain&lt;br /&gt;
| Relase&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| RNDNOTE&lt;br /&gt;
| Note Lo&lt;br /&gt;
| Detune&lt;br /&gt;
| Note Hi&lt;br /&gt;
| Fixed/Free&lt;br /&gt;
| Abs/Rel&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| ADDNOTE&lt;br /&gt;
| Add&lt;br /&gt;
| Detune&lt;br /&gt;
| org key&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| SETNOTE&lt;br /&gt;
| Key&lt;br /&gt;
| Detune&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| LASTNOTE&lt;br /&gt;
| Add&lt;br /&gt;
| detune&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B&lt;br /&gt;
| PORTAMENTO&lt;br /&gt;
| Port. State&lt;br /&gt;
| Port. Type&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| VIBRATO&lt;br /&gt;
| Level note&lt;br /&gt;
| Level fine&lt;br /&gt;
| Modwheel flag&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| PITCHSWEEP1&lt;br /&gt;
| Times&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| PITCHSWEEP2&lt;br /&gt;
| Times&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| SETPITCH&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | Frequency (Hz)&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Fine&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| SETPITCHADSR&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (ADSR)&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| Note range&lt;br /&gt;
| Detune range&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| SCALEVOLUME DLS&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scale&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| MOD2VIBRANGE&lt;br /&gt;
| Key range&lt;br /&gt;
| Cent range&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x23&lt;br /&gt;
| SETUP TREMOLO&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Tremolo scale&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Modw. add scale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| RETURN&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| GOSUB&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| TRAP_EVENT&lt;br /&gt;
| Event&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| SEND_MESSAGE&lt;br /&gt;
| IsVar&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Macro&lt;br /&gt;
| VID&lt;br /&gt;
| Varibale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| GET_MESSAGE&lt;br /&gt;
| Varibale&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B&lt;br /&gt;
| GET_VID&lt;br /&gt;
| Varibale&lt;br /&gt;
| PLAY_MACRO&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| ADDAGECOUNT&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| SETAGECOUNT&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Counter&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| SENDFLAG&lt;br /&gt;
| Flag-ID&lt;br /&gt;
| Value&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| PITCHWHEELR&lt;br /&gt;
| Range up&lt;br /&gt;
| Range down&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| SETPRIORITY&lt;br /&gt;
| Prio&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| ADDPRIORITY&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| AGECNTSPEED&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | Time&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| AGECNTVEL&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | AGE Base&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | AGE Scale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| VOL_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| PAN_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| PitchW_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x43&lt;br /&gt;
| ModW_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| PEDAL_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x45&lt;br /&gt;
| PORTA_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| REVERB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x47&lt;br /&gt;
| SPAN_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| DOPPLER_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x49&lt;br /&gt;
| TREMOLO_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| PREA_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B&lt;br /&gt;
| PREB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| POSTB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4D&lt;br /&gt;
| AUXAFX_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| AUXBFX_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| SETUP_LFO&lt;br /&gt;
| LFO Nr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Period in ms&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| MODE_SELECT&lt;br /&gt;
| DLS vol&lt;br /&gt;
| ITD&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x59&lt;br /&gt;
| SET_KEYGROUP&lt;br /&gt;
| group&lt;br /&gt;
| kill&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A&lt;br /&gt;
| SRCMODE_SELECT&lt;br /&gt;
| SRC type&lt;br /&gt;
| Type 0 SRC filter&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| ADD_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B +&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x61&lt;br /&gt;
| SUB_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B -&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x62&lt;br /&gt;
| MUL_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B *&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x63&lt;br /&gt;
| DIV_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B /&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| ADDI_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B +&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Immediate&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| IF_EQUAL&lt;br /&gt;
| Ctrl&lt;br /&gt;
| A ==&lt;br /&gt;
| Ctrl&lt;br /&gt;
| B&lt;br /&gt;
| Not&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro Step&lt;br /&gt;
|-&lt;br /&gt;
| 0x71&lt;br /&gt;
| IF_LESS&lt;br /&gt;
| Ctrl&lt;br /&gt;
| A &amp;lt;&lt;br /&gt;
| Ctrl&lt;br /&gt;
| B&lt;br /&gt;
| Not&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro Step&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| END&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The entire Pool chunk is terminated by a value of 0xFFFF.&lt;br /&gt;
&lt;br /&gt;
=== Project ===&lt;br /&gt;
&lt;br /&gt;
The Project properties chunk contains values for the sounds, including priority, polyphony, volume, etc.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Proj chunk size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}; Always 0x1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacro ID table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample ID table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Tables table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Keymaps table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Layers table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacro Settings Table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| '''Unknown Table D offset''' ''(usually 0, indicating table is not present)''&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4&lt;br /&gt;
| '''Unknown Table E offset''' ''(usually 0, indicating table is not present)''&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| colspan=2 {{unknown|End of proj header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After the header are a number of data tables. &lt;br /&gt;
&lt;br /&gt;
==== SoundMacro ID Table ====&lt;br /&gt;
&lt;br /&gt;
This is a table of shorts; there's no count value, so it's terminated with a value of 0xFFFF. It's a list of SoundMacro IDs present in the file. Occasionally there's gaps in the list; these gaps are signified by the top bit, 0x8000, being set on the size value preceding the gap.&lt;br /&gt;
&lt;br /&gt;
==== Sample ID Table ====&lt;br /&gt;
&lt;br /&gt;
This functions the same way as the SoundMacro ID table, but it contains a list sample IDs instead.&lt;br /&gt;
&lt;br /&gt;
==== SoundMacro Settings ====&lt;br /&gt;
&lt;br /&gt;
This table begins with a 16-bit count value, then 16 bits of padding. Each entry in the table is 10 bytes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| '''ID'''; referenced in [[EVNT]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| '''SoundMacro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 1&lt;br /&gt;
| '''Max number of voices'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 1&lt;br /&gt;
| '''Priority'''; voices are limited, so priority is used to play more important sounds over others&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| '''Definite Velocity'''; volume (usually 7F)&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| '''Panning'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2&lt;br /&gt;
| '''Definite Key'''; The default pitch (usually 0x3C00... the second byte may possibly be the MIDI channel)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sample ===&lt;br /&gt;
&lt;br /&gt;
The Sample chunk is all the sound data encoded using the standard Gamecube DSP ADPCM codec.  It can be decoded the same way as a [[DSP (File Format)|DSP]] file. Each sound's size is padded to 32 bytes before the next sound's data begins.&lt;br /&gt;
&lt;br /&gt;
=== Sample Directory ===&lt;br /&gt;
&lt;br /&gt;
The Sample Directory chunk (chunk 4 in Metroid Prime, chunk 3 in Metroid Prime 2) is made up of two sets of tables. The structure of both these tables is identical between both games.&lt;br /&gt;
&lt;br /&gt;
==== Table A ====&lt;br /&gt;
&lt;br /&gt;
The first metadata table has one entry per sound, and is terminated with 0xFFFFFFFF; since there's no known sound count anywhere in the file, the only way to read this correctly is to read until you reach the terminator value. Each entry is 0x20 bytes long.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sound ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| '''Padding'''; always 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sound start offset''', relative to the start of the ADPCM chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 2&lt;br /&gt;
| '''Pitch'''; stored as a half-float, always 0x3C00 (1.0)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sample rate'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Number of samples'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Loop start sample'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Loop length''', in samples. To get the loop end sample, add this to the start sample and subtract 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| '''Table B entry offset''', relative to the start of the sound metadata chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Table B ====&lt;br /&gt;
&lt;br /&gt;
These are accessed through the offsets in table A's entries; note that it might not match the sound count, because the same entry in this table can be used with multiple sounds. Each entry is 0x28 bytes long.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''; always 8}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 1&lt;br /&gt;
| '''Initial predictor/scale''' (matches first frame header)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 1&lt;br /&gt;
| '''Loop predictor/scale''' (matches loop start frame header)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''Loop context sample history 1'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| '''Loop context sample history 2'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2 &amp;amp;times; 16&lt;br /&gt;
| '''Decode coefficients'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
* [https://drive.google.com/file/d/0B9MLV21H7SDvemgwN1daYnliSjA/view?usp=sharing Prime Audio Decoder] by Parax will dump all sound effects contained in a given AGSC file.&lt;br /&gt;
&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Audio]]&lt;br /&gt;
[[Category:Metroid Prime]]&lt;br /&gt;
[[Category:Metroid Prime 2: Echoes]]&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=AGSC_(File_Format)&amp;diff=876</id>
		<title>AGSC (File Format)</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=AGSC_(File_Format)&amp;diff=876"/>
				<updated>2015-03-05T06:47:44Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: /* Project */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''AGSC''' is the sound effect format for Metroid Prime and Metroid Prime 2: Echoes. Each AGSC file contains a group of sound effects. The first two Metroid Prime games utilize the MusyX audio engine created by Factor5 and as a result, AGSC files are essentially just embedded MusyX files. &lt;br /&gt;
&lt;br /&gt;
The audio codec used in AGSC is the standard GameCube DSP ADPCM codec.  &lt;br /&gt;
&lt;br /&gt;
{{todo|Better descriptions for how SoundMacros work and a description for what each command does.}}&lt;br /&gt;
{{researchmoderate&lt;br /&gt;
|reason=The proj chunk and the sdir chunk still need some reverse-engineering.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The AGSC format is essentially four data chunks combined into one resource, each of which is a standard MusyX file. Of the four data chunks (pool, proj, samp, and sdir), there's one for sound engine scripts, one for sound properties, one for actual ADPCM sound data, and one for sound metadata. The main difference between Prime 1 and 2 is the header, and some slight changes in the way the four chunks are organized. In Metroid Prime, each chunk begins with its own size value; in Metroid Prime 2, every chunk instead has its size listed at the beginning of the file, at the end of the header. In addition, in Metroid Prime, the third chunk is samp, and the fourth is sdir; in Metroid Prime 2, it's the other way around.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
==== Metroid Prime ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| '''D'''&lt;br /&gt;
| '''Audio Directory'''. Always &amp;quot;Audio/.&amp;quot; Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 + D&lt;br /&gt;
| '''N'''&lt;br /&gt;
| '''Audio Group Name'''. Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 + D + N&lt;br /&gt;
|colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Metroid Prime 2 ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''; always 1}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| D&lt;br /&gt;
| '''Audio Group Name'''. Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Pool size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Project size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample directory size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 + D&lt;br /&gt;
| colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pool ===&lt;br /&gt;
&lt;br /&gt;
The Pool chunk contains tables for SoundMacros, ADSR, keymaps, and layers, if applicable. It starts with a 16-byte header before the different data tables begin.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacros Offset''' (always 0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Tables Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''Keymaps Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Layers Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== SoundMacros ====&lt;br /&gt;
&lt;br /&gt;
The first Pool table denotes MusyX's '''SoundMacros''', small scripts that apply various effects on the sounds in the game.  Each macro is composed of a header followed by a number of commands; each command specifies its type through a single-byte command ID, then specifies the parameters of that particular command, which vary.&lt;br /&gt;
&lt;br /&gt;
The header of each SoundMacro is eight bytes, and is structured as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacro size''' ''(note: includes the size value itself)''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''SoundMacro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''; usually 0}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| colspan=2 {{unknown|Commands begin}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
On the commands, each 4 bytes were originally little endian, but have been swapped to big endian in the AGSC files (despite not being longs). To read the data as originally formatted, every four bytes needs to be byte-swapped. Each command is 8 bytes, and is structured as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| '''Command ID''' (varies; there are 79 known commands in the MusyX audio engine.)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 7&lt;br /&gt;
| '''Command arguments''' (varies between commands)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The SoundMacro will continue with commands until it terminates when the END command is executed.  The command ID for END is 0 and has null command arguments; the next SoundMacro begins after reading it. The entire Pool chunk is terminated by a value of 0xFFFFFFFF.&lt;br /&gt;
&lt;br /&gt;
These are the possible commands:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! width=&amp;quot;2%&amp;quot; | ID&lt;br /&gt;
! width=&amp;quot;7%&amp;quot; | Name&lt;br /&gt;
! colspan=&amp;quot;91%&amp;quot; | Arguments&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| STOP&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| SPLITKEY&lt;br /&gt;
| Keynumber&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| SPLITVEL&lt;br /&gt;
| Velocity&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| WAIT_TICKS&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sampleend&lt;br /&gt;
| Absolute&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| LOOP&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sampleend&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Times&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| GOTO&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| WAIT_MS&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sample end&lt;br /&gt;
| Absolute&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| PLAYMACRO&lt;br /&gt;
| Addnote&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| Priority&lt;br /&gt;
| MaxVoices&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| SENDKEYOFF&lt;br /&gt;
| Variable&lt;br /&gt;
| Last started&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| SPLITMOD&lt;br /&gt;
| Mod value&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| PIANOPAN&lt;br /&gt;
| Scale&lt;br /&gt;
| Centerkey&lt;br /&gt;
| Centerpan&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| SETADSR&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (ADSR)&lt;br /&gt;
| DLS mode&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| SCALEVOLUME&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| PANNING&lt;br /&gt;
| Pan position&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Time ms&lt;br /&gt;
| Width&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| ENVELOPE&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| STARTSAMPLE&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Sample-ID&lt;br /&gt;
| Mode&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x11&lt;br /&gt;
| STOPSAMPLE&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| KEYOFF&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x13&lt;br /&gt;
| SPLITRND&lt;br /&gt;
| RND&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| FADE-IN&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| SPANNING&lt;br /&gt;
| Pan position&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Time ms&lt;br /&gt;
| Width&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| SETADSRCTRL&lt;br /&gt;
| Attack&lt;br /&gt;
| Decay&lt;br /&gt;
| Sustain&lt;br /&gt;
| Relase&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| RNDNOTE&lt;br /&gt;
| Note Lo&lt;br /&gt;
| Detune&lt;br /&gt;
| Note Hi&lt;br /&gt;
| Fixed/Free&lt;br /&gt;
| Abs/Rel&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| ADDNOTE&lt;br /&gt;
| Add&lt;br /&gt;
| Detune&lt;br /&gt;
| org key&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| SETNOTE&lt;br /&gt;
| Key&lt;br /&gt;
| Detune&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| LASTNOTE&lt;br /&gt;
| Add&lt;br /&gt;
| detune&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B&lt;br /&gt;
| PORTAMENTO&lt;br /&gt;
| Port. State&lt;br /&gt;
| Port. Type&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| VIBRATO&lt;br /&gt;
| Level note&lt;br /&gt;
| Level fine&lt;br /&gt;
| Modwheel flag&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| PITCHSWEEP1&lt;br /&gt;
| Times&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| PITCHSWEEP2&lt;br /&gt;
| Times&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| SETPITCH&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | Frequency (Hz)&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Fine&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| SETPITCHADSR&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (ADSR)&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| Note range&lt;br /&gt;
| Detune range&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| SCALEVOLUME DLS&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scale&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| MOD2VIBRANGE&lt;br /&gt;
| Key range&lt;br /&gt;
| Cent range&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x23&lt;br /&gt;
| SETUP TREMOLO&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Tremolo scale&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Modw. add scale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| RETURN&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| GOSUB&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| TRAP_EVENT&lt;br /&gt;
| Event&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| SEND_MESSAGE&lt;br /&gt;
| IsVar&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Macro&lt;br /&gt;
| VID&lt;br /&gt;
| Varibale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| GET_MESSAGE&lt;br /&gt;
| Varibale&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B&lt;br /&gt;
| GET_VID&lt;br /&gt;
| Varibale&lt;br /&gt;
| PLAY_MACRO&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| ADDAGECOUNT&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| SETAGECOUNT&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Counter&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| SENDFLAG&lt;br /&gt;
| Flag-ID&lt;br /&gt;
| Value&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| PITCHWHEELR&lt;br /&gt;
| Range up&lt;br /&gt;
| Range down&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| SETPRIORITY&lt;br /&gt;
| Prio&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| ADDPRIORITY&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| AGECNTSPEED&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | Time&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| AGECNTVEL&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | AGE Base&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | AGE Scale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| VOL_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| PAN_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| PitchW_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x43&lt;br /&gt;
| ModW_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| PEDAL_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x45&lt;br /&gt;
| PORTA_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| REVERB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x47&lt;br /&gt;
| SPAN_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| DOPPLER_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x49&lt;br /&gt;
| TREMOLO_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| PREA_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B&lt;br /&gt;
| PREB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| POSTB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4D&lt;br /&gt;
| AUXAFX_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| AUXBFX_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| SETUP_LFO&lt;br /&gt;
| LFO Nr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Period in ms&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| MODE_SELECT&lt;br /&gt;
| DLS vol&lt;br /&gt;
| ITD&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x59&lt;br /&gt;
| SET_KEYGROUP&lt;br /&gt;
| group&lt;br /&gt;
| kill&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A&lt;br /&gt;
| SRCMODE_SELECT&lt;br /&gt;
| SRC type&lt;br /&gt;
| Type 0 SRC filter&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| ADD_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B +&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x61&lt;br /&gt;
| SUB_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B -&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x62&lt;br /&gt;
| MUL_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B *&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x63&lt;br /&gt;
| DIV_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B /&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| ADDI_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B +&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Immediate&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| IF_EQUAL&lt;br /&gt;
| Ctrl&lt;br /&gt;
| A ==&lt;br /&gt;
| Ctrl&lt;br /&gt;
| B&lt;br /&gt;
| Not&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro Step&lt;br /&gt;
|-&lt;br /&gt;
| 0x71&lt;br /&gt;
| IF_LESS&lt;br /&gt;
| Ctrl&lt;br /&gt;
| A &amp;lt;&lt;br /&gt;
| Ctrl&lt;br /&gt;
| B&lt;br /&gt;
| Not&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro Step&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| END&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Project ===&lt;br /&gt;
&lt;br /&gt;
The Project properties chunk contains values for the sounds, including priority, polyphony, volume, etc.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Proj chunk size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}; Always 0x1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacro ID table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample ID table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Tables table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Keymaps table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Layers table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacro Settings Table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| '''Unknown Table D offset''' ''(usually 0, indicating table is not present)''&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4&lt;br /&gt;
| '''Unknown Table E offset''' ''(usually 0, indicating table is not present)''&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| colspan=2 {{unknown|End of proj header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After the header are a number of data tables. &lt;br /&gt;
&lt;br /&gt;
==== SoundMacro ID Table ====&lt;br /&gt;
&lt;br /&gt;
This is a table of shorts; there's no count value, so it's terminated with a value of 0xFFFF. It's a list of SoundMacro IDs present in the file. Occasionally there's gaps in the list; these gaps are signified by the top bit, 0x8000, being set on the size value preceding the gap.&lt;br /&gt;
&lt;br /&gt;
==== Sample ID Table ====&lt;br /&gt;
&lt;br /&gt;
This functions the same way as the SoundMacro ID table, but it contains a list sample IDs instead.&lt;br /&gt;
&lt;br /&gt;
==== SoundMacro Settings ====&lt;br /&gt;
&lt;br /&gt;
This table begins with a 16-bit count value, then 16 bits of padding. Each entry in the table is 10 bytes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| '''ID'''; referenced in [[EVNT]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| '''SoundMacro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 1&lt;br /&gt;
| '''Max number of voices'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 1&lt;br /&gt;
| '''Priority'''; voices are limited, so priority is used to play more important sounds over others&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| '''Definite Velocity'''; volume (usually 7F)&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| '''Panning'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2&lt;br /&gt;
| '''Definite Key'''; The default pitch (usually 0x3C00... the second byte may possibly be the MIDI channel)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sample ===&lt;br /&gt;
&lt;br /&gt;
The Sample chunk is all the sound data encoded using the standard Gamecube DSP ADPCM codec.  It can be decoded the same way as a [[DSP (File Format)|DSP]] file. Each sound's size is padded to 32 bytes before the next sound's data begins.&lt;br /&gt;
&lt;br /&gt;
=== Sample Directory ===&lt;br /&gt;
&lt;br /&gt;
The Sample Directory chunk (chunk 4 in Metroid Prime, chunk 3 in Metroid Prime 2) is made up of two sets of tables. The structure of both these tables is identical between both games.&lt;br /&gt;
&lt;br /&gt;
==== Table A ====&lt;br /&gt;
&lt;br /&gt;
The first metadata table has one entry per sound, and is terminated with 0xFFFFFFFF; since there's no known sound count anywhere in the file, the only way to read this correctly is to read until you reach the terminator value. Each entry is 0x20 bytes long.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sound ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| '''Padding'''; always 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sound start offset''', relative to the start of the ADPCM chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 2&lt;br /&gt;
| '''Pitch'''; stored as a half-float, always 0x3C00 (1.0)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sample rate'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Number of samples'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Loop start sample'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Loop length''', in samples. To get the loop end sample, add this to the start sample and subtract 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| '''Table B entry offset''', relative to the start of the sound metadata chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Table B ====&lt;br /&gt;
&lt;br /&gt;
These are accessed through the offsets in table A's entries; note that it might not match the sound count, because the same entry in this table can be used with multiple sounds. Each entry is 0x28 bytes long.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''; always 8}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 1&lt;br /&gt;
| '''Initial predictor/scale''' (matches first frame header)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 1&lt;br /&gt;
| '''Loop predictor/scale''' (matches loop start frame header)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''Loop context sample history 1'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| '''Loop context sample history 2'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2 &amp;amp;times; 16&lt;br /&gt;
| '''Decode coefficients'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
* [https://drive.google.com/file/d/0B9MLV21H7SDvemgwN1daYnliSjA/view?usp=sharing Prime Audio Decoder] by Parax will dump all sound effects contained in a given AGSC file.&lt;br /&gt;
&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Audio]]&lt;br /&gt;
[[Category:Metroid Prime]]&lt;br /&gt;
[[Category:Metroid Prime 2: Echoes]]&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=AGSC_(File_Format)&amp;diff=874</id>
		<title>AGSC (File Format)</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=AGSC_(File_Format)&amp;diff=874"/>
				<updated>2015-03-05T06:05:43Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: /* Pool */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''AGSC''' is the sound effect format for Metroid Prime and Metroid Prime 2: Echoes. Each AGSC file contains a group of sound effects. The first two Metroid Prime games utilize the MusyX audio engine created by Factor5 and as a result, AGSC files are essentially just embedded MusyX files. &lt;br /&gt;
&lt;br /&gt;
The audio codec used in AGSC is the standard GameCube DSP ADPCM codec.  &lt;br /&gt;
&lt;br /&gt;
{{todo|Better descriptions for how SoundMacros work and a description for what each command does.}}&lt;br /&gt;
{{researchmoderate&lt;br /&gt;
|reason=The proj chunk and the sdir chunk still need some reverse-engineering.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The AGSC format is essentially four data chunks combined into one resource, each of which is a standard MusyX file. Of the four data chunks (pool, proj, samp, and sdir), there's one for sound engine scripts, one for sound properties, one for actual ADPCM sound data, and one for sound metadata. The main difference between Prime 1 and 2 is the header, and some slight changes in the way the four chunks are organized. In Metroid Prime, each chunk begins with its own size value; in Metroid Prime 2, every chunk instead has its size listed at the beginning of the file, at the end of the header. In addition, in Metroid Prime, the third chunk is samp, and the fourth is sdir; in Metroid Prime 2, it's the other way around.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
==== Metroid Prime ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| '''D'''&lt;br /&gt;
| '''Audio Directory'''. Always &amp;quot;Audio/.&amp;quot; Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 + D&lt;br /&gt;
| '''N'''&lt;br /&gt;
| '''Audio Group Name'''. Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 + D + N&lt;br /&gt;
|colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Metroid Prime 2 ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''; always 1}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| D&lt;br /&gt;
| '''Audio Group Name'''. Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Pool size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Project size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample directory size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 + D&lt;br /&gt;
| colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pool ===&lt;br /&gt;
&lt;br /&gt;
The Pool chunk denotes MusyX's '''SoundMacros''', small scripts that apply various effects on the sounds in the game.  Each macro is composed of a header followed by a number of commands; each command specifies its type through a single-byte command ID, then specifies the parameters of that particular command, which vary.  The Pool chunk also has tables (for ADSR), keymaps, and layers, if applicable.&lt;br /&gt;
&lt;br /&gt;
The first 10 bytes is the header of the Pool chunk.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Header size''' (seems to always be 10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Tables Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''Keymaps Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Layers Offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The header of each SoundMacro is eight bytes, and is structured as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacro size''' ''(note: includes the size value itself)''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''SoundMacro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''; usually 0}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| colspan=2 {{unknown|Commands begin}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
On the commands, each 4 bytes were originally little endian, but have been swapped to big endian in the AGSC files (despite not being longs). To read the data as originally formatted, every four bytes needs to be byte-swapped. Each command is 8 bytes, and is structured as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| '''Command ID''' (varies; there are 79 known commands in the MusyX audio engine.)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 7&lt;br /&gt;
| '''Command arguments''' (varies between commands)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The SoundMacro will continue with commands until it terminates when the END command is executed.  The command ID for END is 0 and has null command arguments; the next SoundMacro begins after reading it. The entire Pool chunk is terminated by a value of 0xFFFFFFFF.&lt;br /&gt;
&lt;br /&gt;
These are the possible commands:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! width=&amp;quot;2%&amp;quot; | ID&lt;br /&gt;
! width=&amp;quot;7%&amp;quot; | Name&lt;br /&gt;
! colspan=&amp;quot;91%&amp;quot; | Arguments&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| STOP&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| SPLITKEY&lt;br /&gt;
| Keynumber&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| SPLITVEL&lt;br /&gt;
| Velocity&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| WAIT_TICKS&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sampleend&lt;br /&gt;
| Absolute&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| LOOP&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sampleend&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Times&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| GOTO&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| WAIT_MS&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sample end&lt;br /&gt;
| Absolute&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| PLAYMACRO&lt;br /&gt;
| Addnote&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| Priority&lt;br /&gt;
| MaxVoices&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| SENDKEYOFF&lt;br /&gt;
| Variable&lt;br /&gt;
| Last started&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| SPLITMOD&lt;br /&gt;
| Mod value&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| PIANOPAN&lt;br /&gt;
| Scale&lt;br /&gt;
| Centerkey&lt;br /&gt;
| Centerpan&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| SETADSR&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (ADSR)&lt;br /&gt;
| DLS mode&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| SCALEVOLUME&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| PANNING&lt;br /&gt;
| Pan position&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Time ms&lt;br /&gt;
| Width&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| ENVELOPE&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| STARTSAMPLE&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Sample-ID&lt;br /&gt;
| Mode&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x11&lt;br /&gt;
| STOPSAMPLE&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| KEYOFF&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x13&lt;br /&gt;
| SPLITRND&lt;br /&gt;
| RND&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| FADE-IN&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| SPANNING&lt;br /&gt;
| Pan position&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Time ms&lt;br /&gt;
| Width&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| SETADSRCTRL&lt;br /&gt;
| Attack&lt;br /&gt;
| Decay&lt;br /&gt;
| Sustain&lt;br /&gt;
| Relase&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| RNDNOTE&lt;br /&gt;
| Note Lo&lt;br /&gt;
| Detune&lt;br /&gt;
| Note Hi&lt;br /&gt;
| Fixed/Free&lt;br /&gt;
| Abs/Rel&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| ADDNOTE&lt;br /&gt;
| Add&lt;br /&gt;
| Detune&lt;br /&gt;
| org key&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| SETNOTE&lt;br /&gt;
| Key&lt;br /&gt;
| Detune&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| LASTNOTE&lt;br /&gt;
| Add&lt;br /&gt;
| detune&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B&lt;br /&gt;
| PORTAMENTO&lt;br /&gt;
| Port. State&lt;br /&gt;
| Port. Type&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| VIBRATO&lt;br /&gt;
| Level note&lt;br /&gt;
| Level fine&lt;br /&gt;
| Modwheel flag&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| PITCHSWEEP1&lt;br /&gt;
| Times&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| PITCHSWEEP2&lt;br /&gt;
| Times&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| SETPITCH&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | Frequency (Hz)&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Fine&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| SETPITCHADSR&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (ADSR)&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| Note range&lt;br /&gt;
| Detune range&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| SCALEVOLUME DLS&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scale&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| MOD2VIBRANGE&lt;br /&gt;
| Key range&lt;br /&gt;
| Cent range&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x23&lt;br /&gt;
| SETUP TREMOLO&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Tremolo scale&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Modw. add scale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| RETURN&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| GOSUB&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| TRAP_EVENT&lt;br /&gt;
| Event&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| SEND_MESSAGE&lt;br /&gt;
| IsVar&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Macro&lt;br /&gt;
| VID&lt;br /&gt;
| Varibale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| GET_MESSAGE&lt;br /&gt;
| Varibale&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B&lt;br /&gt;
| GET_VID&lt;br /&gt;
| Varibale&lt;br /&gt;
| PLAY_MACRO&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| ADDAGECOUNT&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| SETAGECOUNT&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Counter&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| SENDFLAG&lt;br /&gt;
| Flag-ID&lt;br /&gt;
| Value&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| PITCHWHEELR&lt;br /&gt;
| Range up&lt;br /&gt;
| Range down&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| SETPRIORITY&lt;br /&gt;
| Prio&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| ADDPRIORITY&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| AGECNTSPEED&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | Time&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| AGECNTVEL&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | AGE Base&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | AGE Scale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| VOL_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| PAN_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| PitchW_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x43&lt;br /&gt;
| ModW_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| PEDAL_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x45&lt;br /&gt;
| PORTA_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| REVERB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x47&lt;br /&gt;
| SPAN_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| DOPPLER_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x49&lt;br /&gt;
| TREMOLO_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| PREA_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B&lt;br /&gt;
| PREB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| POSTB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4D&lt;br /&gt;
| AUXAFX_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| AUXBFX_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| SETUP_LFO&lt;br /&gt;
| LFO Nr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Period in ms&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| MODE_SELECT&lt;br /&gt;
| DLS vol&lt;br /&gt;
| ITD&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x59&lt;br /&gt;
| SET_KEYGROUP&lt;br /&gt;
| group&lt;br /&gt;
| kill&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A&lt;br /&gt;
| SRCMODE_SELECT&lt;br /&gt;
| SRC type&lt;br /&gt;
| Type 0 SRC filter&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| ADD_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B +&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x61&lt;br /&gt;
| SUB_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B -&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x62&lt;br /&gt;
| MUL_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B *&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x63&lt;br /&gt;
| DIV_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B /&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| ADDI_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B +&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Immediate&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| IF_EQUAL&lt;br /&gt;
| Ctrl&lt;br /&gt;
| A ==&lt;br /&gt;
| Ctrl&lt;br /&gt;
| B&lt;br /&gt;
| Not&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro Step&lt;br /&gt;
|-&lt;br /&gt;
| 0x71&lt;br /&gt;
| IF_LESS&lt;br /&gt;
| Ctrl&lt;br /&gt;
| A &amp;lt;&lt;br /&gt;
| Ctrl&lt;br /&gt;
| B&lt;br /&gt;
| Not&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro Step&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| END&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Project ===&lt;br /&gt;
&lt;br /&gt;
The Project properties chunk contains values for the sounds, including priority, polyphony, volume, etc.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Proj chunk size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}; Always 0x1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacro ID table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample ID table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Unknown Table A offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Unknown Table B offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Unknown Table C offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| '''SoundMacro Settings Table offset'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 4&lt;br /&gt;
| '''Unknown Table D offset''' ''(usually 0, indicating table is not present)''&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 4&lt;br /&gt;
| '''Unknown Table E offset''' ''(usually 0, indicating table is not present)''&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| colspan=2 {{unknown|End of proj header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After the header are a number of data tables. &lt;br /&gt;
&lt;br /&gt;
==== SoundMacro ID Table ====&lt;br /&gt;
&lt;br /&gt;
This is a table of shorts; there's no count value, so it's terminated with a value of 0xFFFF. It's a list of SoundMacro IDs present in the file. Occasionally there's gaps in the list; these gaps are signified by the top bit, 0x8000, being set on the size value preceding the gap.&lt;br /&gt;
&lt;br /&gt;
==== Sample ID Table ====&lt;br /&gt;
&lt;br /&gt;
This functions the same way as the SoundMacro ID table, but it contains a list sample IDs instead.&lt;br /&gt;
&lt;br /&gt;
==== SoundMacro Settings ====&lt;br /&gt;
&lt;br /&gt;
This table begins with a 16-bit count value, then 16 bits of padding. Each entry in the table is 10 bytes.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| '''ID'''; referenced in [[EVNT]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| '''SoundMacro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 1&lt;br /&gt;
| '''Max number of voices'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 1&lt;br /&gt;
| '''Priority'''; voices are limited, so priority is used to play more important sounds over others&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| '''Definite Velocity'''; volume (usually 7F)&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| '''Panning'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2&lt;br /&gt;
| '''Definite Key'''; The default pitch (usually 0x3C00... the second byte may possibly be the MIDI channel)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sample ===&lt;br /&gt;
&lt;br /&gt;
The Sample chunk is all the sound data encoded using the standard Gamecube DSP ADPCM codec.  It can be decoded the same way as a [[DSP (File Format)|DSP]] file. Each sound's size is padded to 32 bytes before the next sound's data begins.&lt;br /&gt;
&lt;br /&gt;
=== Sample Directory ===&lt;br /&gt;
&lt;br /&gt;
The Sample Directory chunk (chunk 4 in Metroid Prime, chunk 3 in Metroid Prime 2) is made up of two sets of tables. The structure of both these tables is identical between both games.&lt;br /&gt;
&lt;br /&gt;
==== Table A ====&lt;br /&gt;
&lt;br /&gt;
The first metadata table has one entry per sound, and is terminated with 0xFFFFFFFF; since there's no known sound count anywhere in the file, the only way to read this correctly is to read until you reach the terminator value. Each entry is 0x20 bytes long.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sound ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| '''Padding'''; always 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sound start offset''', relative to the start of the ADPCM chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 2&lt;br /&gt;
| '''Pitch'''; stored as a half-float, always 0x3C00 (1.0)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sample rate'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Number of samples'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Loop start sample'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Loop length''', in samples. To get the loop end sample, add this to the start sample and subtract 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| '''Table B entry offset''', relative to the start of the sound metadata chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Table B ====&lt;br /&gt;
&lt;br /&gt;
These are accessed through the offsets in table A's entries; note that it might not match the sound count, because the same entry in this table can be used with multiple sounds. Each entry is 0x28 bytes long.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''; always 8}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 1&lt;br /&gt;
| '''Initial predictor/scale''' (matches first frame header)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 1&lt;br /&gt;
| '''Loop predictor/scale''' (matches loop start frame header)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''Loop context sample history 1'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| '''Loop context sample history 2'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2 &amp;amp;times; 16&lt;br /&gt;
| '''Decode coefficients'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
* [https://drive.google.com/file/d/0B9MLV21H7SDvemgwN1daYnliSjA/view?usp=sharing Prime Audio Decoder] by Parax will dump all sound effects contained in a given AGSC file.&lt;br /&gt;
&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Audio]]&lt;br /&gt;
[[Category:Metroid Prime]]&lt;br /&gt;
[[Category:Metroid Prime 2: Echoes]]&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=AGSC_(File_Format)&amp;diff=851</id>
		<title>AGSC (File Format)</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=AGSC_(File_Format)&amp;diff=851"/>
				<updated>2015-03-01T08:45:17Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: /* Pool */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''AGSC''' is the sound effect format for Metroid Prime and Metroid Prime 2: Echoes. Each AGSC file contains a group of sound effects. The first two Metroid Prime games utilize the MusyX audio engine created by Factor5 and as a result, AGSC files are essentially just embedded MusyX files. &lt;br /&gt;
&lt;br /&gt;
The audio codec used in AGSC is the standard GameCube DSP ADPCM codec.  &lt;br /&gt;
&lt;br /&gt;
{{todo|Better descriptions for how SoundMacros work and a description for what each command does.}}&lt;br /&gt;
{{researchmoderate&lt;br /&gt;
|reason=The proj chunk and the sdir chunk still need some reverse-engineering.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The AGSC format is essentially four data chunks combined into one resource, each of which is a standard MusyX file. Of the four data chunks (pool, proj, samp, and sdir), there's one for sound engine scripts, one for sound properties, one for actual ADPCM sound data, and one for sound metadata. The main difference between Prime 1 and 2 is the header, and some slight changes in the way the four chunks are organized. In Metroid Prime, each chunk begins with its own size value; in Metroid Prime 2, every chunk instead has its size listed at the beginning of the file, at the end of the header. In addition, in Metroid Prime, the third chunk is samp, and the fourth is sdir; in Metroid Prime 2, it's the other way around.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
==== Metroid Prime ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| '''D'''&lt;br /&gt;
| '''Audio Directory'''. Always &amp;quot;Audio/.&amp;quot; Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 + D&lt;br /&gt;
| '''N'''&lt;br /&gt;
| '''Audio Group Name'''. Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 + D + N&lt;br /&gt;
|colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Metroid Prime 2 ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''; always 1}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| D&lt;br /&gt;
| '''Audio Group Name'''. Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Pool size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Project size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample directory size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 + D&lt;br /&gt;
| colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pool ===&lt;br /&gt;
&lt;br /&gt;
The Pool chunk denotes MusyX's '''SoundMacros''', small scripts that apply various effects on the sounds in the game. Each macro is composed of a number of pre-defined commands; each command specifies its type through a single-byte command ID, then specifies the parameters of that particular command, which vary.&lt;br /&gt;
&lt;br /&gt;
Each 4 bytes were originally little endian, but have been swapped to big endian in the AGSC files (despite not being longs). To read the data as originally formatted, every four bytes needs to be byte-swapped.&lt;br /&gt;
&lt;br /&gt;
Each command is structured as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Soundmacro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 1&lt;br /&gt;
| '''Command ID''' (varies; there are 79 known commands in the MusyX audio engine.)&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| 7&lt;br /&gt;
| '''Command arguments''' (varies between commands)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The SoundMacro will continue with commands until it terminates when the END command is executed.  The command ID for END is 0 and has null command arguments; the next SoundMacro begins after reading it. The entire Pool chunk is terminated by a value of 0xFFFFFFFF.&lt;br /&gt;
&lt;br /&gt;
These are the possible commands:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! width=&amp;quot;2%&amp;quot; | ID&lt;br /&gt;
! width=&amp;quot;7%&amp;quot; | Name&lt;br /&gt;
! colspan=&amp;quot;91%&amp;quot; | Arguments&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| STOP&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| SPLITKEY&lt;br /&gt;
| Keynumber&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| SPLITVEL&lt;br /&gt;
| Velocity&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| WAIT_TICKS&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sampleend&lt;br /&gt;
| Absolute&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| LOOP&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sampleend&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Times&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| GOTO&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| WAIT_MS&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sample end&lt;br /&gt;
| Absolute&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| PLAYMACRO&lt;br /&gt;
| Addnote&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| Priority&lt;br /&gt;
| MaxVoices&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| SENDKEYOFF&lt;br /&gt;
| Variable&lt;br /&gt;
| Last started&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| SPLITMOD&lt;br /&gt;
| Mod value&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| PIANOPAN&lt;br /&gt;
| Scale&lt;br /&gt;
| Centerkey&lt;br /&gt;
| Centerpan&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| SETADSR&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (ADSR)&lt;br /&gt;
| DLS mode&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| SCALEVOLUME&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| PANNING&lt;br /&gt;
| Pan position&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Time ms&lt;br /&gt;
| Width&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| ENVELOPE&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| STARTSAMPLE&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Sample-ID&lt;br /&gt;
| Mode&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x11&lt;br /&gt;
| STOPSAMPLE&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| KEYOFF&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x13&lt;br /&gt;
| SPLITRND&lt;br /&gt;
| RND&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| FADE-IN&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| SPANNING&lt;br /&gt;
| Pan position&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Time ms&lt;br /&gt;
| Width&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| SETADSRCTRL&lt;br /&gt;
| Attack&lt;br /&gt;
| Decay&lt;br /&gt;
| Sustain&lt;br /&gt;
| Relase&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| RNDNOTE&lt;br /&gt;
| Note Lo&lt;br /&gt;
| Detune&lt;br /&gt;
| Note Hi&lt;br /&gt;
| Fixed/Free&lt;br /&gt;
| Abs/Rel&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| ADDNOTE&lt;br /&gt;
| Add&lt;br /&gt;
| Detune&lt;br /&gt;
| org key&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| SETNOTE&lt;br /&gt;
| Key&lt;br /&gt;
| Detune&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| LASTNOTE&lt;br /&gt;
| Add&lt;br /&gt;
| detune&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B&lt;br /&gt;
| PORTAMENTO&lt;br /&gt;
| Port. State&lt;br /&gt;
| Port. Type&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| VIBRATO&lt;br /&gt;
| Level note&lt;br /&gt;
| Level fine&lt;br /&gt;
| Modwheel flag&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| PITCHSWEEP1&lt;br /&gt;
| Times&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| PITCHSWEEP2&lt;br /&gt;
| Times&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| SETPITCH&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | Frequency (Hz)&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Fine&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| SETPITCHADSR&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (ADSR)&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| Note range&lt;br /&gt;
| Detune range&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| SCALEVOLUME DLS&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scale&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| MOD2VIBRANGE&lt;br /&gt;
| Key range&lt;br /&gt;
| Cent range&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x23&lt;br /&gt;
| SETUP TREMOLO&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Tremolo scale&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Modw. add scale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| RETURN&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| GOSUB&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| TRAP_EVENT&lt;br /&gt;
| Event&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| SEND_MESSAGE&lt;br /&gt;
| IsVar&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Macro&lt;br /&gt;
| VID&lt;br /&gt;
| Varibale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| GET_MESSAGE&lt;br /&gt;
| Varibale&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B&lt;br /&gt;
| GET_VID&lt;br /&gt;
| Varibale&lt;br /&gt;
| PLAY_MACRO&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| ADDAGECOUNT&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| SETAGECOUNT&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Counter&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| SENDFLAG&lt;br /&gt;
| Flag-ID&lt;br /&gt;
| Value&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| PITCHWHEELR&lt;br /&gt;
| Range up&lt;br /&gt;
| Range down&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| SETPRIORITY&lt;br /&gt;
| Prio&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| ADDPRIORITY&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| AGECNTSPEED&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | Time&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| AGECNTVEL&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | AGE Base&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | AGE Scale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| VOL_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| PAN_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| PitchW_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x43&lt;br /&gt;
| ModW_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| PEDAL_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x45&lt;br /&gt;
| PORTA_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| REVERB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x47&lt;br /&gt;
| SPAN_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| DOPPLER_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x49&lt;br /&gt;
| TREMOLO_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| PREA_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B&lt;br /&gt;
| PREB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| POSTB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4D&lt;br /&gt;
| AUXAFX_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| AUXBFX_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| SETUP_LFO&lt;br /&gt;
| LFO Nr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Period in ms&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| MODE_SELECT&lt;br /&gt;
| DLS vol&lt;br /&gt;
| ITD&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x59&lt;br /&gt;
| SET_KEYGROUP&lt;br /&gt;
| group&lt;br /&gt;
| kill&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A&lt;br /&gt;
| SRCMODE_SELECT&lt;br /&gt;
| SRC type&lt;br /&gt;
| Type 0 SRC filter&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| ADD_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B +&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x61&lt;br /&gt;
| SUB_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B -&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x62&lt;br /&gt;
| MUL_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B *&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x63&lt;br /&gt;
| DIV_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B /&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| ADDI_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B +&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Immediate&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| IF_EQUAL&lt;br /&gt;
| Ctrl&lt;br /&gt;
| A ==&lt;br /&gt;
| Ctrl&lt;br /&gt;
| B&lt;br /&gt;
| Not&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro Step&lt;br /&gt;
|-&lt;br /&gt;
| 0x71&lt;br /&gt;
| IF_LESS&lt;br /&gt;
| Ctrl&lt;br /&gt;
| A &amp;lt;&lt;br /&gt;
| Ctrl&lt;br /&gt;
| B&lt;br /&gt;
| Not&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro Step&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| END&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Project ===&lt;br /&gt;
&lt;br /&gt;
The Project properties chunk contains values for the sounds, including priority, polyphony, volume, etc.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Chunk size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}; Always 0x1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}; Always 0x28&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}; possible offset?&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}; always +2 than previous long&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}; always +2 than previous long&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}; always +4 than previous long&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| colspan=2 {{unknown|WIP}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The first table terminates with 0xFFFFFFFF. Then there's 2 bytes that represent the number of soundmacros, followed by two bytes of 0x00s for padding.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| '''ID'''; referenced in [[EVNT]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| '''Pool SoundMacro ID'''; this is the ID used by the soundmacros in the Pool chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 1&lt;br /&gt;
| '''Max number of voices'''; The maximum of voices allowed for this soundeffect.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 1&lt;br /&gt;
| '''Priority'''; voices are limited, so priority is used to play more important sounds over others&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| '''Definite Velocity'''; volume (usually 7F)&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| '''Panning'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2&lt;br /&gt;
| '''Definite Key'''; The default pitch (usually 0x3C00...the second byte may possibly be the MIDI channel)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sample ===&lt;br /&gt;
&lt;br /&gt;
The Sample chunk is all the sound data encoded using the standard Gamecube DSP ADPCM codec.  It can be decoded the same way as a [[DSP (File Format)|DSP]] file. Each sound's size is padded to 32 bytes before the next sound's data begins.&lt;br /&gt;
&lt;br /&gt;
=== Sample Directory ===&lt;br /&gt;
&lt;br /&gt;
The Sample Directory chunk (chunk 4 in Metroid Prime, chunk 3 in Metroid Prime 2) is made up of two sets of tables. The structure of both these tables is identical between both games.&lt;br /&gt;
&lt;br /&gt;
==== Table A ====&lt;br /&gt;
&lt;br /&gt;
The first metadata table has one entry per sound, and is terminated with 0xFFFFFFFF; since there's no known sound count anywhere in the file, the only way to read this correctly is to read until you reach the terminator value. Each entry is 0x20 bytes long.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sound ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| '''Padding'''; always 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sound start offset''', relative to the start of the ADPCM chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 2&lt;br /&gt;
| '''Pitch'''; stored as a half-float, always 0x3C00 (1.0)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sample rate'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Number of samples'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Loop start sample'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Loop length''', in samples. To get the loop end sample, add this to the start sample and subtract 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| '''Table B entry offset''', relative to the start of the sound metadata chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Table B ====&lt;br /&gt;
&lt;br /&gt;
These are accessed through the offsets in table A's entries; note that it might not match the sound count, because the same entry in this table can be used with multiple sounds. Each entry is 0x28 bytes long.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''; always 8}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 1&lt;br /&gt;
| '''Initial predictor/scale''' (matches first frame header)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 1&lt;br /&gt;
| '''Loop predictor/scale''' (matches loop start frame header)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''Loop context sample history 1'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| '''Loop context sample history 2'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2 &amp;amp;times; 16&lt;br /&gt;
| '''Decode coefficients'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
* [https://drive.google.com/file/d/0B9MLV21H7SDvemgwN1daYnliSjA/view?usp=sharing Prime Audio Decoder] by Parax will dump all sound effects contained in a given AGSC file.&lt;br /&gt;
&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Audio]]&lt;br /&gt;
[[Category:Metroid Prime]]&lt;br /&gt;
[[Category:Metroid Prime 2: Echoes]]&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=AGSC_(File_Format)&amp;diff=850</id>
		<title>AGSC (File Format)</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=AGSC_(File_Format)&amp;diff=850"/>
				<updated>2015-03-01T08:28:19Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: /* Project */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''AGSC''' is the sound effect format for Metroid Prime and Metroid Prime 2: Echoes. Each AGSC file contains a group of sound effects. The first two Metroid Prime games utilize the MusyX audio engine created by Factor5 and as a result, AGSC files are essentially just embedded MusyX files. &lt;br /&gt;
&lt;br /&gt;
The audio codec used in AGSC is the standard GameCube DSP ADPCM codec.  &lt;br /&gt;
&lt;br /&gt;
{{todo|Better descriptions for how SoundMacros work and a description for what each command does.}}&lt;br /&gt;
{{researchmoderate&lt;br /&gt;
|reason=The proj chunk and the sdir chunk still need some reverse-engineering.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The AGSC format is essentially four data chunks combined into one resource, each of which is a standard MusyX file. Of the four data chunks (pool, proj, samp, and sdir), there's one for sound engine scripts, one for sound properties, one for actual ADPCM sound data, and one for sound metadata. The main difference between Prime 1 and 2 is the header, and some slight changes in the way the four chunks are organized. In Metroid Prime, each chunk begins with its own size value; in Metroid Prime 2, every chunk instead has its size listed at the beginning of the file, at the end of the header. In addition, in Metroid Prime, the third chunk is samp, and the fourth is sdir; in Metroid Prime 2, it's the other way around.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
==== Metroid Prime ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| '''D'''&lt;br /&gt;
| '''Audio Directory'''. Always &amp;quot;Audio/.&amp;quot; Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 + D&lt;br /&gt;
| '''N'''&lt;br /&gt;
| '''Audio Group Name'''. Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 + D + N&lt;br /&gt;
|colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Metroid Prime 2 ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''; always 1}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| D&lt;br /&gt;
| '''Audio Group Name'''. Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Pool size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Project size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample directory size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 + D&lt;br /&gt;
| colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pool ===&lt;br /&gt;
&lt;br /&gt;
The Pool chunk denotes MusyX's '''SoundMacros''', small scripts that apply various effects on the sounds in the game. Each macro is composed of a number of pre-defined commands; each command specifies its type through a single-byte command ID, then specifies the parameters of that particular command, which vary.&lt;br /&gt;
&lt;br /&gt;
Each 4 bytes were originally little endian, but have been swapped to big endian in the AGSC files (despite not being longs). To read the data as originally formatted, every four bytes needs to be byte-swapped.&lt;br /&gt;
&lt;br /&gt;
Each command is structured as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| '''Command ID''' (varies; there are 79 known commands in the MusyX audio engine.)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 7&lt;br /&gt;
| '''Command arguments''' (varies between commands)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The SoundMacro terminates when the END command is executed.  The command ID for END is 0 and has null command arguments; the next SoundMacro begins after reading it. The entire Pool chunk is terminated by a value of 0xFFFFFFFF.&lt;br /&gt;
&lt;br /&gt;
These are the possible commands:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! width=&amp;quot;2%&amp;quot; | ID&lt;br /&gt;
! width=&amp;quot;7%&amp;quot; | Name&lt;br /&gt;
! colspan=&amp;quot;91%&amp;quot; | Arguments&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| STOP&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| SPLITKEY&lt;br /&gt;
| Keynumber&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| SPLITVEL&lt;br /&gt;
| Velocity&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| WAIT_TICKS&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sampleend&lt;br /&gt;
| Absolute&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| LOOP&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sampleend&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Times&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| GOTO&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| WAIT_MS&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sample end&lt;br /&gt;
| Absolute&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| PLAYMACRO&lt;br /&gt;
| Addnote&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| Priority&lt;br /&gt;
| MaxVoices&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| SENDKEYOFF&lt;br /&gt;
| Variable&lt;br /&gt;
| Last started&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| SPLITMOD&lt;br /&gt;
| Mod value&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| PIANOPAN&lt;br /&gt;
| Scale&lt;br /&gt;
| Centerkey&lt;br /&gt;
| Centerpan&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| SETADSR&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (ADSR)&lt;br /&gt;
| DLS mode&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| SCALEVOLUME&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| PANNING&lt;br /&gt;
| Pan position&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Time ms&lt;br /&gt;
| Width&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| ENVELOPE&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| STARTSAMPLE&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Sample-ID&lt;br /&gt;
| Mode&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x11&lt;br /&gt;
| STOPSAMPLE&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| KEYOFF&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x13&lt;br /&gt;
| SPLITRND&lt;br /&gt;
| RND&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| FADE-IN&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| SPANNING&lt;br /&gt;
| Pan position&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Time ms&lt;br /&gt;
| Width&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| SETADSRCTRL&lt;br /&gt;
| Attack&lt;br /&gt;
| Decay&lt;br /&gt;
| Sustain&lt;br /&gt;
| Relase&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| RNDNOTE&lt;br /&gt;
| Note Lo&lt;br /&gt;
| Detune&lt;br /&gt;
| Note Hi&lt;br /&gt;
| Fixed/Free&lt;br /&gt;
| Abs/Rel&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| ADDNOTE&lt;br /&gt;
| Add&lt;br /&gt;
| Detune&lt;br /&gt;
| org key&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| SETNOTE&lt;br /&gt;
| Key&lt;br /&gt;
| Detune&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| LASTNOTE&lt;br /&gt;
| Add&lt;br /&gt;
| detune&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B&lt;br /&gt;
| PORTAMENTO&lt;br /&gt;
| Port. State&lt;br /&gt;
| Port. Type&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| VIBRATO&lt;br /&gt;
| Level note&lt;br /&gt;
| Level fine&lt;br /&gt;
| Modwheel flag&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| PITCHSWEEP1&lt;br /&gt;
| Times&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| PITCHSWEEP2&lt;br /&gt;
| Times&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| SETPITCH&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | Frequency (Hz)&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Fine&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| SETPITCHADSR&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (ADSR)&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| Note range&lt;br /&gt;
| Detune range&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| SCALEVOLUME DLS&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scale&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| MOD2VIBRANGE&lt;br /&gt;
| Key range&lt;br /&gt;
| Cent range&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x23&lt;br /&gt;
| SETUP TREMOLO&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Tremolo scale&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Modw. add scale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| RETURN&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| GOSUB&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| TRAP_EVENT&lt;br /&gt;
| Event&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| SEND_MESSAGE&lt;br /&gt;
| IsVar&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Macro&lt;br /&gt;
| VID&lt;br /&gt;
| Varibale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| GET_MESSAGE&lt;br /&gt;
| Varibale&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B&lt;br /&gt;
| GET_VID&lt;br /&gt;
| Varibale&lt;br /&gt;
| PLAY_MACRO&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| ADDAGECOUNT&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| SETAGECOUNT&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Counter&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| SENDFLAG&lt;br /&gt;
| Flag-ID&lt;br /&gt;
| Value&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| PITCHWHEELR&lt;br /&gt;
| Range up&lt;br /&gt;
| Range down&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| SETPRIORITY&lt;br /&gt;
| Prio&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| ADDPRIORITY&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| AGECNTSPEED&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | Time&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| AGECNTVEL&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | AGE Base&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | AGE Scale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| VOL_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| PAN_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| PitchW_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x43&lt;br /&gt;
| ModW_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| PEDAL_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x45&lt;br /&gt;
| PORTA_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| REVERB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x47&lt;br /&gt;
| SPAN_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| DOPPLER_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x49&lt;br /&gt;
| TREMOLO_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| PREA_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B&lt;br /&gt;
| PREB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| POSTB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4D&lt;br /&gt;
| AUXAFX_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| AUXBFX_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| SETUP_LFO&lt;br /&gt;
| LFO Nr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Period in ms&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| MODE_SELECT&lt;br /&gt;
| DLS vol&lt;br /&gt;
| ITD&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x59&lt;br /&gt;
| SET_KEYGROUP&lt;br /&gt;
| group&lt;br /&gt;
| kill&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A&lt;br /&gt;
| SRCMODE_SELECT&lt;br /&gt;
| SRC type&lt;br /&gt;
| Type 0 SRC filter&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| ADD_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B +&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x61&lt;br /&gt;
| SUB_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B -&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x62&lt;br /&gt;
| MUL_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B *&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x63&lt;br /&gt;
| DIV_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B /&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| ADDI_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B +&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Immediate&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| IF_EQUAL&lt;br /&gt;
| Ctrl&lt;br /&gt;
| A ==&lt;br /&gt;
| Ctrl&lt;br /&gt;
| B&lt;br /&gt;
| Not&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro Step&lt;br /&gt;
|-&lt;br /&gt;
| 0x71&lt;br /&gt;
| IF_LESS&lt;br /&gt;
| Ctrl&lt;br /&gt;
| A &amp;lt;&lt;br /&gt;
| Ctrl&lt;br /&gt;
| B&lt;br /&gt;
| Not&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro Step&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| END&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Project ===&lt;br /&gt;
&lt;br /&gt;
The Project properties chunk contains values for the sounds, including priority, polyphony, volume, etc.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Chunk size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}; Always 0x1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}; Always 0x28&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}; possible offset?&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}; always +2 than previous long&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}; always +2 than previous long&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}; always +4 than previous long&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| colspan=2 {{unknown|WIP}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The first table terminates with 0xFFFFFFFF. Then there's 2 bytes that represent the number of soundmacros, followed by two bytes of 0x00s for padding.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| '''ID'''; referenced in [[EVNT]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| '''Pool SoundMacro ID'''; this is the ID used by the soundmacros in the Pool chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 1&lt;br /&gt;
| '''Max number of voices'''; The maximum of voices allowed for this soundeffect.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 1&lt;br /&gt;
| '''Priority'''; voices are limited, so priority is used to play more important sounds over others&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| '''Definite Velocity'''; volume (usually 7F)&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| '''Panning'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2&lt;br /&gt;
| '''Definite Key'''; The default pitch (usually 0x3C00...the second byte may possibly be the MIDI channel)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sample ===&lt;br /&gt;
&lt;br /&gt;
The Sample chunk is all the sound data encoded using the standard Gamecube DSP ADPCM codec.  It can be decoded the same way as a [[DSP (File Format)|DSP]] file. Each sound's size is padded to 32 bytes before the next sound's data begins.&lt;br /&gt;
&lt;br /&gt;
=== Sample Directory ===&lt;br /&gt;
&lt;br /&gt;
The Sample Directory chunk (chunk 4 in Metroid Prime, chunk 3 in Metroid Prime 2) is made up of two sets of tables. The structure of both these tables is identical between both games.&lt;br /&gt;
&lt;br /&gt;
==== Table A ====&lt;br /&gt;
&lt;br /&gt;
The first metadata table has one entry per sound, and is terminated with 0xFFFFFFFF; since there's no known sound count anywhere in the file, the only way to read this correctly is to read until you reach the terminator value. Each entry is 0x20 bytes long.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sound ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| '''Padding'''; always 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sound start offset''', relative to the start of the ADPCM chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 2&lt;br /&gt;
| '''Pitch'''; stored as a half-float, always 0x3C00 (1.0)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sample rate'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Number of samples'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Loop start sample'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Loop length''', in samples. To get the loop end sample, add this to the start sample and subtract 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| '''Table B entry offset''', relative to the start of the sound metadata chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Table B ====&lt;br /&gt;
&lt;br /&gt;
These are accessed through the offsets in table A's entries; note that it might not match the sound count, because the same entry in this table can be used with multiple sounds. Each entry is 0x28 bytes long.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''; always 8}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 1&lt;br /&gt;
| '''Initial predictor/scale''' (matches first frame header)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 1&lt;br /&gt;
| '''Loop predictor/scale''' (matches loop start frame header)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''Loop context sample history 1'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| '''Loop context sample history 2'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2 &amp;amp;times; 16&lt;br /&gt;
| '''Decode coefficients'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
* [https://drive.google.com/file/d/0B9MLV21H7SDvemgwN1daYnliSjA/view?usp=sharing Prime Audio Decoder] by Parax will dump all sound effects contained in a given AGSC file.&lt;br /&gt;
&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Audio]]&lt;br /&gt;
[[Category:Metroid Prime]]&lt;br /&gt;
[[Category:Metroid Prime 2: Echoes]]&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=AGSC_(File_Format)&amp;diff=837</id>
		<title>AGSC (File Format)</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=AGSC_(File_Format)&amp;diff=837"/>
				<updated>2015-02-25T22:15:35Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: /* Project */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''AGSC''' is the sound effect format for Metroid Prime and Metroid Prime 2: Echoes. Each AGSC file contains a group of sound effects. The first two Metroid Prime games utilize the MusyX audio engine created by Factor5 and as a result, AGSC files are essentially just embedded MusyX files. &lt;br /&gt;
&lt;br /&gt;
The audio codec used in AGSC is the standard GameCube DSP ADPCM codec.  &lt;br /&gt;
&lt;br /&gt;
{{todo|Better descriptions for how SoundMacros work and a description for what each command does.}}&lt;br /&gt;
{{researchmoderate&lt;br /&gt;
|reason=The proj chunk and the sdir chunk still need some reverse-engineering.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The AGSC format is essentially four data chunks combined into one resource, each of which is a standard MusyX file. Of the four data chunks (pool, proj, samp, and sdir), there's one for sound engine scripts, one for sound properties, one for actual ADPCM sound data, and one for sound metadata. The main difference between Prime 1 and 2 is the header, and some slight changes in the way the four chunks are organized. In Metroid Prime, each chunk begins with its own size value; in Metroid Prime 2, every chunk instead has its size listed at the beginning of the file, at the end of the header. In addition, in Metroid Prime, the third chunk is samp, and the fourth is sdir; in Metroid Prime 2, it's the other way around.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
==== Metroid Prime ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| '''D'''&lt;br /&gt;
| '''Audio Directory'''. Always &amp;quot;Audio/.&amp;quot; Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 + D&lt;br /&gt;
| '''N'''&lt;br /&gt;
| '''Audio Group Name'''. Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 + D + N&lt;br /&gt;
|colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Metroid Prime 2 ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''; always 1}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| D&lt;br /&gt;
| '''Audio Group Name'''. Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Pool size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Project size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample directory size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 + D&lt;br /&gt;
| colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pool ===&lt;br /&gt;
&lt;br /&gt;
The Pool chunk denotes MusyX's '''SoundMacros''', small scripts that apply various effects on the sounds in the game. Each macro is composed of a number of pre-defined commands; each command specifies its type through a single-byte command ID, then specifies the parameters of that particular command, which vary.&lt;br /&gt;
&lt;br /&gt;
Each 4 bytes were originally little endian, but have been swapped to big endian in the AGSC files (despite not being longs). To read the data as originally formatted, every four bytes needs to be byte-swapped.&lt;br /&gt;
&lt;br /&gt;
Each command is structured as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| '''Command ID''' (varies; there are 79 known commands in the MusyX audio engine.)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 7&lt;br /&gt;
| '''Command arguments''' (varies between commands)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The SoundMacro terminates when the END command is executed.  The command ID for END is 0 and has null command arguments; the next SoundMacro begins after reading it. The entire Pool chunk is terminated by a value of 0xFFFFFFFF.&lt;br /&gt;
&lt;br /&gt;
These are the possible commands:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! width=&amp;quot;2%&amp;quot; | ID&lt;br /&gt;
! width=&amp;quot;7%&amp;quot; | Name&lt;br /&gt;
! colspan=&amp;quot;91%&amp;quot; | Arguments&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| STOP&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| SPLITKEY&lt;br /&gt;
| Keynumber&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| SPLITVEL&lt;br /&gt;
| Velocity&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| WAIT_TICKS&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sampleend&lt;br /&gt;
| Absolute&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| LOOP&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sampleend&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Times&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| GOTO&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| WAIT_MS&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sample end&lt;br /&gt;
| Absolute&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| PLAYMACRO&lt;br /&gt;
| Addnote&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| Priority&lt;br /&gt;
| MaxVoices&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| SENDKEYOFF&lt;br /&gt;
| Variable&lt;br /&gt;
| Last started&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| SPLITMOD&lt;br /&gt;
| Mod value&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| PIANOPAN&lt;br /&gt;
| Scale&lt;br /&gt;
| Centerkey&lt;br /&gt;
| Centerpan&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| SETADSR&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (ADSR)&lt;br /&gt;
| DLS mode&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| SCALEVOLUME&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| PANNING&lt;br /&gt;
| Pan position&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Time ms&lt;br /&gt;
| Width&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| ENVELOPE&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| STARTSAMPLE&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Sample-ID&lt;br /&gt;
| Mode&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x11&lt;br /&gt;
| STOPSAMPLE&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| KEYOFF&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x13&lt;br /&gt;
| SPLITRND&lt;br /&gt;
| RND&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| FADE-IN&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| SPANNING&lt;br /&gt;
| Pan position&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Time ms&lt;br /&gt;
| Width&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| SETADSRCTRL&lt;br /&gt;
| Attack&lt;br /&gt;
| Decay&lt;br /&gt;
| Sustain&lt;br /&gt;
| Relase&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| RNDNOTE&lt;br /&gt;
| Note Lo&lt;br /&gt;
| Detune&lt;br /&gt;
| Note Hi&lt;br /&gt;
| Fixed/Free&lt;br /&gt;
| Abs/Rel&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| ADDNOTE&lt;br /&gt;
| Add&lt;br /&gt;
| Detune&lt;br /&gt;
| org key&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| SETNOTE&lt;br /&gt;
| Key&lt;br /&gt;
| Detune&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| LASTNOTE&lt;br /&gt;
| Add&lt;br /&gt;
| detune&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B&lt;br /&gt;
| PORTAMENTO&lt;br /&gt;
| Port. State&lt;br /&gt;
| Port. Type&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| VIBRATO&lt;br /&gt;
| Level note&lt;br /&gt;
| Level fine&lt;br /&gt;
| Modwheel flag&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| PITCHSWEEP1&lt;br /&gt;
| Times&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| PITCHSWEEP2&lt;br /&gt;
| Times&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| SETPITCH&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | Frequency (Hz)&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Fine&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| SETPITCHADSR&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (ADSR)&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| Note range&lt;br /&gt;
| Detune range&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| SCALEVOLUME DLS&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scale&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| MOD2VIBRANGE&lt;br /&gt;
| Key range&lt;br /&gt;
| Cent range&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x23&lt;br /&gt;
| SETUP TREMOLO&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Tremolo scale&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Modw. add scale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| RETURN&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| GOSUB&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| TRAP_EVENT&lt;br /&gt;
| Event&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| SEND_MESSAGE&lt;br /&gt;
| IsVar&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Macro&lt;br /&gt;
| VID&lt;br /&gt;
| Varibale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| GET_MESSAGE&lt;br /&gt;
| Varibale&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B&lt;br /&gt;
| GET_VID&lt;br /&gt;
| Varibale&lt;br /&gt;
| PLAY_MACRO&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| ADDAGECOUNT&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| SETAGECOUNT&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Counter&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| SENDFLAG&lt;br /&gt;
| Flag-ID&lt;br /&gt;
| Value&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| PITCHWHEELR&lt;br /&gt;
| Range up&lt;br /&gt;
| Range down&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| SETPRIORITY&lt;br /&gt;
| Prio&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| ADDPRIORITY&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| AGECNTSPEED&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | Time&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| AGECNTVEL&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | AGE Base&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | AGE Scale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| VOL_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| PAN_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| PitchW_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x43&lt;br /&gt;
| ModW_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| PEDAL_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x45&lt;br /&gt;
| PORTA_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| REVERB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x47&lt;br /&gt;
| SPAN_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| DOPPLER_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x49&lt;br /&gt;
| TREMOLO_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| PREA_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B&lt;br /&gt;
| PREB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| POSTB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4D&lt;br /&gt;
| AUXAFX_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| AUXBFX_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| SETUP_LFO&lt;br /&gt;
| LFO Nr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Period in ms&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| MODE_SELECT&lt;br /&gt;
| DLS vol&lt;br /&gt;
| ITD&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x59&lt;br /&gt;
| SET_KEYGROUP&lt;br /&gt;
| group&lt;br /&gt;
| kill&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A&lt;br /&gt;
| SRCMODE_SELECT&lt;br /&gt;
| SRC type&lt;br /&gt;
| Type 0 SRC filter&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| ADD_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B +&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x61&lt;br /&gt;
| SUB_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B -&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x62&lt;br /&gt;
| MUL_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B *&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x63&lt;br /&gt;
| DIV_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B /&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| ADDI_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B +&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Immediate&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| IF_EQUAL&lt;br /&gt;
| Ctrl&lt;br /&gt;
| A ==&lt;br /&gt;
| Ctrl&lt;br /&gt;
| B&lt;br /&gt;
| Not&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro Step&lt;br /&gt;
|-&lt;br /&gt;
| 0x71&lt;br /&gt;
| IF_LESS&lt;br /&gt;
| Ctrl&lt;br /&gt;
| A &amp;lt;&lt;br /&gt;
| Ctrl&lt;br /&gt;
| B&lt;br /&gt;
| Not&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro Step&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| END&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Project ===&lt;br /&gt;
&lt;br /&gt;
The Project properties chunk contains values for the sounds, including priority, polyphony, volume, etc.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Chunk size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}; Always 0x1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}; Always 0x28&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}; possible offset?&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}; always +2 than previous long&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}; always +2 than previous long&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}; always +4 than previous long&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| colspan=2 {{unknown|WIP}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The first table terminates with 0xFFFFFFFF. Then there's 2 bytes that represent the number of soundmacros, followed by two bytes of 0x00s for padding.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| '''ID'''; referenced in [[EVNT]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}; looks like another ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 1&lt;br /&gt;
| '''Max number of voices'''; The maximum of voices allowed for this soundeffect.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 1&lt;br /&gt;
| '''Priority'''; voices are limited, so priority is used to play more important sounds over others&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| '''Definite Velocity'''; volume (usually 7F)&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1&lt;br /&gt;
| '''Panning'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2&lt;br /&gt;
| '''Definite Key'''; The default pitch (usually 0x3C00...the second byte may possibly be the MIDI channel)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sample ===&lt;br /&gt;
&lt;br /&gt;
The Sample chunk is all the sound data encoded using the standard Gamecube DSP ADPCM codec.  It can be decoded the same way as a [[DSP (File Format)|DSP]] file. Each sound's size is padded to 32 bytes before the next sound's data begins.&lt;br /&gt;
&lt;br /&gt;
=== Sample Directory ===&lt;br /&gt;
&lt;br /&gt;
The Sample Directory chunk (chunk 4 in Metroid Prime, chunk 3 in Metroid Prime 2) is made up of two sets of tables. The structure of both these tables is identical between both games.&lt;br /&gt;
&lt;br /&gt;
==== Table A ====&lt;br /&gt;
&lt;br /&gt;
The first metadata table has one entry per sound, and is terminated with 0xFFFFFFFF; since there's no known sound count anywhere in the file, the only way to read this correctly is to read until you reach the terminator value. Each entry is 0x20 bytes long.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sound ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| '''Padding'''; always 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sound start offset''', relative to the start of the ADPCM chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 2&lt;br /&gt;
| '''Pitch'''; stored as a half-float, always 0x3C00 (1.0)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sample rate'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Number of samples'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Loop start sample'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Loop length''', in samples. To get the loop end sample, add this to the start sample and subtract 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| '''Table B entry offset''', relative to the start of the sound metadata chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Table B ====&lt;br /&gt;
&lt;br /&gt;
These are accessed through the offsets in table A's entries; note that it might not match the sound count, because the same entry in this table can be used with multiple sounds. Each entry is 0x28 bytes long.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''; always 8}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 1&lt;br /&gt;
| '''Initial predictor/scale''' (matches first frame header)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 1&lt;br /&gt;
| '''Loop predictor/scale''' (matches loop start frame header)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''Loop context sample history 1'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| '''Loop context sample history 2'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2 &amp;amp;times; 16&lt;br /&gt;
| '''Decode coefficients'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
* [https://drive.google.com/file/d/0B9MLV21H7SDvemgwN1daYnliSjA/view?usp=sharing Prime Audio Decoder] by Parax will dump all sound effects contained in a given AGSC file.&lt;br /&gt;
&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Audio]]&lt;br /&gt;
[[Category:Metroid Prime]]&lt;br /&gt;
[[Category:Metroid Prime 2: Echoes]]&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=AGSC_(File_Format)&amp;diff=836</id>
		<title>AGSC (File Format)</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=AGSC_(File_Format)&amp;diff=836"/>
				<updated>2015-02-25T21:31:26Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: /* Project */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''AGSC''' is the sound effect format for Metroid Prime and Metroid Prime 2: Echoes. Each AGSC file contains a group of sound effects. The first two Metroid Prime games utilize the MusyX audio engine created by Factor5 and as a result, AGSC files are essentially just embedded MusyX files. &lt;br /&gt;
&lt;br /&gt;
The audio codec used in AGSC is the standard GameCube DSP ADPCM codec.  &lt;br /&gt;
&lt;br /&gt;
{{todo|Better descriptions for how SoundMacros work and a description for what each command does.}}&lt;br /&gt;
{{researchmoderate&lt;br /&gt;
|reason=The proj chunk and the sdir chunk still need some reverse-engineering.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The AGSC format is essentially four data chunks combined into one resource, each of which is a standard MusyX file. Of the four data chunks (pool, proj, samp, and sdir), there's one for sound engine scripts, one for sound properties, one for actual ADPCM sound data, and one for sound metadata. The main difference between Prime 1 and 2 is the header, and some slight changes in the way the four chunks are organized. In Metroid Prime, each chunk begins with its own size value; in Metroid Prime 2, every chunk instead has its size listed at the beginning of the file, at the end of the header. In addition, in Metroid Prime, the third chunk is samp, and the fourth is sdir; in Metroid Prime 2, it's the other way around.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
==== Metroid Prime ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| '''D'''&lt;br /&gt;
| '''Audio Directory'''. Always &amp;quot;Audio/.&amp;quot; Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 + D&lt;br /&gt;
| '''N'''&lt;br /&gt;
| '''Audio Group Name'''. Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 + D + N&lt;br /&gt;
|colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Metroid Prime 2 ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''; always 1}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| D&lt;br /&gt;
| '''Audio Group Name'''. Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Pool size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Project size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample directory size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 + D&lt;br /&gt;
| colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pool ===&lt;br /&gt;
&lt;br /&gt;
The Pool chunk denotes MusyX's '''SoundMacros''', small scripts that apply various effects on the sounds in the game. Each macro is composed of a number of pre-defined commands; each command specifies its type through a single-byte command ID, then specifies the parameters of that particular command, which vary.&lt;br /&gt;
&lt;br /&gt;
Each 4 bytes were originally little endian, but have been swapped to big endian in the AGSC files (despite not being longs). To read the data as originally formatted, every four bytes needs to be byte-swapped.&lt;br /&gt;
&lt;br /&gt;
Each command is structured as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| '''Command ID''' (varies; there are 79 known commands in the MusyX audio engine.)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 7&lt;br /&gt;
| '''Command arguments''' (varies between commands)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The SoundMacro terminates when the END command is executed.  The command ID for END is 0 and has null command arguments; the next SoundMacro begins after reading it. The entire Pool chunk is terminated by a value of 0xFFFFFFFF.&lt;br /&gt;
&lt;br /&gt;
These are the possible commands:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! width=&amp;quot;2%&amp;quot; | ID&lt;br /&gt;
! width=&amp;quot;7%&amp;quot; | Name&lt;br /&gt;
! colspan=&amp;quot;91%&amp;quot; | Arguments&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| STOP&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| SPLITKEY&lt;br /&gt;
| Keynumber&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| SPLITVEL&lt;br /&gt;
| Velocity&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| WAIT_TICKS&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sampleend&lt;br /&gt;
| Absolute&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| LOOP&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sampleend&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Times&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| GOTO&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| WAIT_MS&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sample end&lt;br /&gt;
| Absolute&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| PLAYMACRO&lt;br /&gt;
| Addnote&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| Priority&lt;br /&gt;
| MaxVoices&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| SENDKEYOFF&lt;br /&gt;
| Variable&lt;br /&gt;
| Last started&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| SPLITMOD&lt;br /&gt;
| Mod value&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| PIANOPAN&lt;br /&gt;
| Scale&lt;br /&gt;
| Centerkey&lt;br /&gt;
| Centerpan&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| SETADSR&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (ADSR)&lt;br /&gt;
| DLS mode&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| SCALEVOLUME&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| PANNING&lt;br /&gt;
| Pan position&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Time ms&lt;br /&gt;
| Width&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| ENVELOPE&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| STARTSAMPLE&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Sample-ID&lt;br /&gt;
| Mode&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x11&lt;br /&gt;
| STOPSAMPLE&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| KEYOFF&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x13&lt;br /&gt;
| SPLITRND&lt;br /&gt;
| RND&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| FADE-IN&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| SPANNING&lt;br /&gt;
| Pan position&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Time ms&lt;br /&gt;
| Width&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| SETADSRCTRL&lt;br /&gt;
| Attack&lt;br /&gt;
| Decay&lt;br /&gt;
| Sustain&lt;br /&gt;
| Relase&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| RNDNOTE&lt;br /&gt;
| Note Lo&lt;br /&gt;
| Detune&lt;br /&gt;
| Note Hi&lt;br /&gt;
| Fixed/Free&lt;br /&gt;
| Abs/Rel&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| ADDNOTE&lt;br /&gt;
| Add&lt;br /&gt;
| Detune&lt;br /&gt;
| org key&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| SETNOTE&lt;br /&gt;
| Key&lt;br /&gt;
| Detune&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| LASTNOTE&lt;br /&gt;
| Add&lt;br /&gt;
| detune&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B&lt;br /&gt;
| PORTAMENTO&lt;br /&gt;
| Port. State&lt;br /&gt;
| Port. Type&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| VIBRATO&lt;br /&gt;
| Level note&lt;br /&gt;
| Level fine&lt;br /&gt;
| Modwheel flag&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| PITCHSWEEP1&lt;br /&gt;
| Times&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| PITCHSWEEP2&lt;br /&gt;
| Times&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| SETPITCH&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | Frequency (Hz)&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Fine&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| SETPITCHADSR&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (ADSR)&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| Note range&lt;br /&gt;
| Detune range&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| SCALEVOLUME DLS&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scale&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| MOD2VIBRANGE&lt;br /&gt;
| Key range&lt;br /&gt;
| Cent range&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x23&lt;br /&gt;
| SETUP TREMOLO&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Tremolo scale&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Modw. add scale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| RETURN&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| GOSUB&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| TRAP_EVENT&lt;br /&gt;
| Event&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| SEND_MESSAGE&lt;br /&gt;
| IsVar&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Macro&lt;br /&gt;
| VID&lt;br /&gt;
| Varibale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| GET_MESSAGE&lt;br /&gt;
| Varibale&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B&lt;br /&gt;
| GET_VID&lt;br /&gt;
| Varibale&lt;br /&gt;
| PLAY_MACRO&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| ADDAGECOUNT&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| SETAGECOUNT&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Counter&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| SENDFLAG&lt;br /&gt;
| Flag-ID&lt;br /&gt;
| Value&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| PITCHWHEELR&lt;br /&gt;
| Range up&lt;br /&gt;
| Range down&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| SETPRIORITY&lt;br /&gt;
| Prio&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| ADDPRIORITY&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| AGECNTSPEED&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | Time&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| AGECNTVEL&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | AGE Base&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | AGE Scale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| VOL_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| PAN_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| PitchW_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x43&lt;br /&gt;
| ModW_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| PEDAL_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x45&lt;br /&gt;
| PORTA_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| REVERB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x47&lt;br /&gt;
| SPAN_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| DOPPLER_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x49&lt;br /&gt;
| TREMOLO_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| PREA_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B&lt;br /&gt;
| PREB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| POSTB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4D&lt;br /&gt;
| AUXAFX_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| AUXBFX_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| SETUP_LFO&lt;br /&gt;
| LFO Nr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Period in ms&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| MODE_SELECT&lt;br /&gt;
| DLS vol&lt;br /&gt;
| ITD&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x59&lt;br /&gt;
| SET_KEYGROUP&lt;br /&gt;
| group&lt;br /&gt;
| kill&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A&lt;br /&gt;
| SRCMODE_SELECT&lt;br /&gt;
| SRC type&lt;br /&gt;
| Type 0 SRC filter&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| ADD_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B +&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x61&lt;br /&gt;
| SUB_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B -&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x62&lt;br /&gt;
| MUL_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B *&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x63&lt;br /&gt;
| DIV_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B /&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| ADDI_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B +&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Immediate&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| IF_EQUAL&lt;br /&gt;
| Ctrl&lt;br /&gt;
| A ==&lt;br /&gt;
| Ctrl&lt;br /&gt;
| B&lt;br /&gt;
| Not&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro Step&lt;br /&gt;
|-&lt;br /&gt;
| 0x71&lt;br /&gt;
| IF_LESS&lt;br /&gt;
| Ctrl&lt;br /&gt;
| A &amp;lt;&lt;br /&gt;
| Ctrl&lt;br /&gt;
| B&lt;br /&gt;
| Not&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro Step&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| END&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Project ===&lt;br /&gt;
&lt;br /&gt;
The Project properties chunk contains values for the sounds, including priority, polyphony, volume, etc.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Chunk size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}; Always 0x1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}; Always 0x28&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}; possible offset?&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}; always +2 than previous long&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}; always +2 than previous long&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}; always +4 than previous long&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| colspan=2 {{unknown|WIP}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The first table terminates with 0xFFFFFFFF.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| '''Number of soundmacros'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| '''Padding'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''ID'''; referenced in [[EVNT]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}; looks like another ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 1&lt;br /&gt;
| '''Max number of voices'''; The maximum of voices allowed for this soundeffect.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| 1&lt;br /&gt;
| '''Priority'''; voices are limited, so priority is used to play more important sounds over others&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| 1&lt;br /&gt;
| '''Definite Velocity'''; volume (usually 7F)&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| 1&lt;br /&gt;
| '''Panning'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 2&lt;br /&gt;
| '''Definite Key'''; The default pitch (usually 0x3C00...the second byte may possibly be the MIDI channel)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sample ===&lt;br /&gt;
&lt;br /&gt;
The Sample chunk is all the sound data encoded using the standard Gamecube DSP ADPCM codec.  It can be decoded the same way as a [[DSP (File Format)|DSP]] file. Each sound's size is padded to 32 bytes before the next sound's data begins.&lt;br /&gt;
&lt;br /&gt;
=== Sample Directory ===&lt;br /&gt;
&lt;br /&gt;
The Sample Directory chunk (chunk 4 in Metroid Prime, chunk 3 in Metroid Prime 2) is made up of two sets of tables. The structure of both these tables is identical between both games.&lt;br /&gt;
&lt;br /&gt;
==== Table A ====&lt;br /&gt;
&lt;br /&gt;
The first metadata table has one entry per sound, and is terminated with 0xFFFFFFFF; since there's no known sound count anywhere in the file, the only way to read this correctly is to read until you reach the terminator value. Each entry is 0x20 bytes long.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sound ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| '''Padding'''; always 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sound start offset''', relative to the start of the ADPCM chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 2&lt;br /&gt;
| '''Pitch'''; stored as a half-float, always 0x3C00 (1.0)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sample rate'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Number of samples'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Loop start sample'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Loop length''', in samples. To get the loop end sample, add this to the start sample and subtract 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| '''Table B entry offset''', relative to the start of the sound metadata chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Table B ====&lt;br /&gt;
&lt;br /&gt;
These are accessed through the offsets in table A's entries; note that it might not match the sound count, because the same entry in this table can be used with multiple sounds. Each entry is 0x28 bytes long.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''; always 8}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 1&lt;br /&gt;
| '''Initial predictor/scale''' (matches first frame header)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 1&lt;br /&gt;
| '''Loop predictor/scale''' (matches loop start frame header)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''Loop context sample history 1'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| '''Loop context sample history 2'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2 &amp;amp;times; 16&lt;br /&gt;
| '''Decode coefficients'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
* [https://drive.google.com/file/d/0B9MLV21H7SDvemgwN1daYnliSjA/view?usp=sharing Prime Audio Decoder] by Parax will dump all sound effects contained in a given AGSC file.&lt;br /&gt;
&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Audio]]&lt;br /&gt;
[[Category:Metroid Prime]]&lt;br /&gt;
[[Category:Metroid Prime 2: Echoes]]&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=AGSC_(File_Format)&amp;diff=730</id>
		<title>AGSC (File Format)</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=AGSC_(File_Format)&amp;diff=730"/>
				<updated>2015-02-11T08:07:16Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: /* Project */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''AGSC''' is the sound effect format for Metroid Prime and Metroid Prime 2: Echoes. Each AGSC file contains a group of sound effects. The first two Metroid Prime games utilize the MusyX audio engine created by Factor5 and as a result, AGSC files are essentially just embedded MusyX files. &lt;br /&gt;
&lt;br /&gt;
The audio codec used in AGSC is the standard GameCube DSP ADPCM codec.  &lt;br /&gt;
&lt;br /&gt;
{{todo|Better descriptions for how SoundMacros work and a description for what each command does.}}&lt;br /&gt;
{{researchmoderate&lt;br /&gt;
|reason=The proj chunk and the sdir chunk still need some reverse-engineering.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The AGSC format is essentially four data chunks combined into one resource, each of which is a standard MusyX file. Of the four data chunks (pool, proj, samp, and sdir), there's one for sound engine scripts, one for sound properties, one for actual ADPCM sound data, and one for sound metadata. The main difference between Prime 1 and 2 is the header, and some slight changes in the way the four chunks are organized. In Metroid Prime, each chunk begins with its own size value; in Metroid Prime 2, every chunk instead has its size listed at the beginning of the file, at the end of the header. In addition, in Metroid Prime, the third chunk is samp, and the fourth is sdir; in Metroid Prime 2, it's the other way around.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
==== Metroid Prime ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| '''D'''&lt;br /&gt;
| '''Audio Directory'''. Always &amp;quot;Audio/.&amp;quot; Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 + D&lt;br /&gt;
| '''N'''&lt;br /&gt;
| '''Audio Group Name'''. Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 + D + N&lt;br /&gt;
|colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Metroid Prime 2 ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''; always 1}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| D&lt;br /&gt;
| '''Audio Group Name'''. Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Pool size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Project size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sample directory size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 + D&lt;br /&gt;
| colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Pool ===&lt;br /&gt;
&lt;br /&gt;
The Pool chunk denotes MusyX's '''SoundMacros''', small scripts that apply various effects on the sounds in the game. Each macro is composed of a number of pre-defined commands; each command specifies its type through a single-byte command ID, then specifies the parameters of that particular command, which vary.&lt;br /&gt;
&lt;br /&gt;
Each 4 bytes were originally little endian, but have been swapped to big endian in the AGSC files (despite not being longs). To read the data as originally formatted, every four bytes needs to be byte-swapped.&lt;br /&gt;
&lt;br /&gt;
Each command is structured as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| '''Command ID''' (varies; there are 79 known commands in the MusyX audio engine.)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 7&lt;br /&gt;
| '''Command arguments''' (varies between commands)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The SoundMacro terminates when the END command is executed.  The command ID for END is 0 and has null command arguments; the next SoundMacro begins after reading it. The entire Pool chunk is terminated by a value of 0xFFFFFFFF.&lt;br /&gt;
&lt;br /&gt;
These are the possible commands:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! width=&amp;quot;2%&amp;quot; | ID&lt;br /&gt;
! width=&amp;quot;7%&amp;quot; | Name&lt;br /&gt;
! colspan=&amp;quot;91%&amp;quot; | Arguments&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| STOP&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
| width=&amp;quot;13%&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| SPLITKEY&lt;br /&gt;
| Keynumber&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| SPLITVEL&lt;br /&gt;
| Velocity&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| WAIT_TICKS&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sampleend&lt;br /&gt;
| Absolute&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| LOOP&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sampleend&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Times&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| GOTO&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| WAIT_MS&lt;br /&gt;
| Keyoff&lt;br /&gt;
| Random&lt;br /&gt;
| Sample end&lt;br /&gt;
| Absolute&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| PLAYMACRO&lt;br /&gt;
| Addnote&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| Priority&lt;br /&gt;
| MaxVoices&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| SENDKEYOFF&lt;br /&gt;
| Variable&lt;br /&gt;
| Last started&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| SPLITMOD&lt;br /&gt;
| Mod value&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| PIANOPAN&lt;br /&gt;
| Scale&lt;br /&gt;
| Centerkey&lt;br /&gt;
| Centerpan&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| SETADSR&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (ADSR)&lt;br /&gt;
| DLS mode&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| SCALEVOLUME&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| PANNING&lt;br /&gt;
| Pan position&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Time ms&lt;br /&gt;
| Width&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| ENVELOPE&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| STARTSAMPLE&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Sample-ID&lt;br /&gt;
| Mode&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | Offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x11&lt;br /&gt;
| STOPSAMPLE&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| KEYOFF&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x13&lt;br /&gt;
| SPLITRND&lt;br /&gt;
| RND&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| FADE-IN&lt;br /&gt;
| Scale&lt;br /&gt;
| Add&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (Curve)&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| SPANNING&lt;br /&gt;
| Pan position&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Time ms&lt;br /&gt;
| Width&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| SETADSRCTRL&lt;br /&gt;
| Attack&lt;br /&gt;
| Decay&lt;br /&gt;
| Sustain&lt;br /&gt;
| Relase&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x17&lt;br /&gt;
| RNDNOTE&lt;br /&gt;
| Note Lo&lt;br /&gt;
| Detune&lt;br /&gt;
| Note Hi&lt;br /&gt;
| Fixed/Free&lt;br /&gt;
| Abs/Rel&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| ADDNOTE&lt;br /&gt;
| Add&lt;br /&gt;
| Detune&lt;br /&gt;
| org key&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| SETNOTE&lt;br /&gt;
| Key&lt;br /&gt;
| Detune&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A&lt;br /&gt;
| LASTNOTE&lt;br /&gt;
| Add&lt;br /&gt;
| detune&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B&lt;br /&gt;
| PORTAMENTO&lt;br /&gt;
| Port. State&lt;br /&gt;
| Port. Type&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| VIBRATO&lt;br /&gt;
| Level note&lt;br /&gt;
| Level fine&lt;br /&gt;
| Modwheel flag&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| PITCHSWEEP1&lt;br /&gt;
| Times&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| PITCHSWEEP2&lt;br /&gt;
| Times&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| ms switch&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Ticks/Millisec.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| SETPITCH&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | Frequency (Hz)&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Fine&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| SETPITCHADSR&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Table-ID (ADSR)&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| Note range&lt;br /&gt;
| Detune range&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x21&lt;br /&gt;
| SCALEVOLUME DLS&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scale&lt;br /&gt;
| Org vol&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| MOD2VIBRANGE&lt;br /&gt;
| Key range&lt;br /&gt;
| Cent range&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x23&lt;br /&gt;
| SETUP TREMOLO&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Tremolo scale&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Modw. add scale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| RETURN&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x25&lt;br /&gt;
| GOSUB&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| TRAP_EVENT&lt;br /&gt;
| Event&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro ID&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro step&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x29&lt;br /&gt;
| SEND_MESSAGE&lt;br /&gt;
| IsVar&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Macro&lt;br /&gt;
| VID&lt;br /&gt;
| Varibale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A&lt;br /&gt;
| GET_MESSAGE&lt;br /&gt;
| Varibale&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B&lt;br /&gt;
| GET_VID&lt;br /&gt;
| Varibale&lt;br /&gt;
| PLAY_MACRO&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| ADDAGECOUNT&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x31&lt;br /&gt;
| SETAGECOUNT&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Counter&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x32&lt;br /&gt;
| SENDFLAG&lt;br /&gt;
| Flag-ID&lt;br /&gt;
| Value&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| PITCHWHEELR&lt;br /&gt;
| Range up&lt;br /&gt;
| Range down&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| SETPRIORITY&lt;br /&gt;
| Prio&lt;br /&gt;
| colspan=&amp;quot;6&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x35&lt;br /&gt;
| ADDPRIORITY&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Add&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x36&lt;br /&gt;
| AGECNTSPEED&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; | Time&lt;br /&gt;
|-&lt;br /&gt;
| 0x37&lt;br /&gt;
| AGECNTVEL&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | AGE Base&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | AGE Scale&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| VOL_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x41&lt;br /&gt;
| PAN_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x42&lt;br /&gt;
| PitchW_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x43&lt;br /&gt;
| ModW_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x44&lt;br /&gt;
| PEDAL_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x45&lt;br /&gt;
| PORTA_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x46&lt;br /&gt;
| REVERB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x47&lt;br /&gt;
| SPAN_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x48&lt;br /&gt;
| DOPPLER_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x49&lt;br /&gt;
| TREMOLO_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A&lt;br /&gt;
| PREA_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B&lt;br /&gt;
| PREB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C&lt;br /&gt;
| POSTB_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4D&lt;br /&gt;
| AUXAFX_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E&lt;br /&gt;
| AUXBFX_SELECT&lt;br /&gt;
| MIDI Contr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Scaling percentage&lt;br /&gt;
| Combine&lt;br /&gt;
| is var.&lt;br /&gt;
| Fine scaling&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x50&lt;br /&gt;
| SETUP_LFO&lt;br /&gt;
| LFO Nr.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Period in ms&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x58&lt;br /&gt;
| MODE_SELECT&lt;br /&gt;
| DLS vol&lt;br /&gt;
| ITD&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x59&lt;br /&gt;
| SET_KEYGROUP&lt;br /&gt;
| group&lt;br /&gt;
| kill&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A&lt;br /&gt;
| SRCMODE_SELECT&lt;br /&gt;
| SRC type&lt;br /&gt;
| Type 0 SRC filter&lt;br /&gt;
| colspan=&amp;quot;5&amp;quot; {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| ADD_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B +&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x61&lt;br /&gt;
| SUB_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B -&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x62&lt;br /&gt;
| MUL_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B *&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x63&lt;br /&gt;
| DIV_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B /&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| C&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x64&lt;br /&gt;
| ADDI_VARS&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| A =&lt;br /&gt;
| Var/Ctrl&lt;br /&gt;
| B +&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | Immediate&lt;br /&gt;
| {{unknown|}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x70&lt;br /&gt;
| IF_EQUAL&lt;br /&gt;
| Ctrl&lt;br /&gt;
| A ==&lt;br /&gt;
| Ctrl&lt;br /&gt;
| B&lt;br /&gt;
| Not&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro Step&lt;br /&gt;
|-&lt;br /&gt;
| 0x71&lt;br /&gt;
| IF_LESS&lt;br /&gt;
| Ctrl&lt;br /&gt;
| A &amp;lt;&lt;br /&gt;
| Ctrl&lt;br /&gt;
| B&lt;br /&gt;
| Not&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | SoundMacro Step&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| END&lt;br /&gt;
| colspan=&amp;quot;7&amp;quot; {{unknown|}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Project ===&lt;br /&gt;
&lt;br /&gt;
The Project properties chunk contains values for the sounds, including priority, polyphony, volume, etc.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Chunk size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}; Always 0x1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}; Always 0x28&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}; possible offset?&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}; always +2 than previous long&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}; always +2 than previous long&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}; always +4 than previous long&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| colspan=2 {{unknown|WIP}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sample ===&lt;br /&gt;
&lt;br /&gt;
The Sample chunk is all the sound data encoded using the standard Gamecube DSP ADPCM codec.  It can be decoded the same way as a [[DSP (File Format)|DSP]] file. Each sound's size is padded to 32 bytes before the next sound's data begins.&lt;br /&gt;
&lt;br /&gt;
=== Sample Directory ===&lt;br /&gt;
&lt;br /&gt;
The Sample Directory chunk (chunk 4 in Metroid Prime, chunk 3 in Metroid Prime 2) is made up of two sets of tables. The structure of both these tables is identical between both games.&lt;br /&gt;
&lt;br /&gt;
==== Table A ====&lt;br /&gt;
&lt;br /&gt;
The first metadata table has one entry per sound, and is terminated with 0xFFFFFFFF; since there's no known sound count anywhere in the file, the only way to read this correctly is to read until you reach the terminator value. Each entry is 0x20 bytes long.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sound ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| '''Padding'''; always 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sound start offset''', relative to the start of the ADPCM chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 2&lt;br /&gt;
| '''Pitch'''; stored as a half-float, always 0x3C00 (1.0)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sample rate'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Number of samples'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Loop start sample'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Loop length''', in samples. To get the loop end sample, add this to the start sample and subtract 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| '''Table B entry offset''', relative to the start of the sound metadata chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Table B ====&lt;br /&gt;
&lt;br /&gt;
These are accessed through the offsets in table A's entries; note that it might not match the sound count, because the same entry in this table can be used with multiple sounds. Each entry is 0x28 bytes long.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''; always 8}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 1&lt;br /&gt;
| '''Initial predictor/scale''' (matches first frame header)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 1&lt;br /&gt;
| '''Loop predictor/scale''' (matches loop start frame header)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 2&lt;br /&gt;
| '''Loop context sample history 1'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 2&lt;br /&gt;
| '''Loop context sample history 2'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2 &amp;amp;times; 16&lt;br /&gt;
| '''Decode coefficients'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
* [https://drive.google.com/file/d/0B9MLV21H7SDvemgwN1daYnliSjA/view?usp=sharing Prime Audio Decoder] by Parax will dump all sound effects contained in a given AGSC file.&lt;br /&gt;
&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Audio]]&lt;br /&gt;
[[Category:Metroid Prime]]&lt;br /&gt;
[[Category:Metroid Prime 2: Echoes]]&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=AGSC_(File_Format)&amp;diff=639</id>
		<title>AGSC (File Format)</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=AGSC_(File_Format)&amp;diff=639"/>
				<updated>2015-02-03T08:00:49Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''AGSC''' is the sound effect format for Metroid Prime and Metroid Prime 2: Echoes. Each AGSC file contains a group of sound effects. The first two Metroid Prime games utilize the MusyX audio engine created by Factor5 and as a result, AGSC files are created by utilizing files generated from MusyX's SDK.  &lt;br /&gt;
&lt;br /&gt;
According to the debug maps in Metroid Prime, there are references to various &amp;quot;classes&amp;quot;, with one of them controlling audio in the map, known as AudioGroupSet.  So presumably, AGSC is an abbreviation for '''Audio Group Set Class''' or '''Audio Group Set Cooked''', as all the game data had to be cooked into their final formats.  &lt;br /&gt;
&lt;br /&gt;
The audio codec used in AGSC is the standard GameCube DSP ADPCM codec, as described in the GameCube SDK.  &lt;br /&gt;
&lt;br /&gt;
{{researchmoderate&lt;br /&gt;
|reason=The proj chunk and the sdir chunk still need some reverse-engineering.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
The AGSC format is split up into four distinct data chunks; one for sound engine scripts, one for sound properties, one for sound metadata, and one for actual ADPCM sound data. The format is very similar between Metroid Prime 1 and 2; the main difference is the header, and some slight changes in the way the four chunks are organized. In Metroid Prime, each chunk begins with its own size value; in Metroid Prime 2, every chunk instead has its size listed at the beginning of the file, at the end of the header. In addition, in Metroid Prime, the third chunk is sound data, and the fourth is sound metadata; in Metroid Prime 2, it's the other way around.&lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
==== Metroid Prime ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| '''D'''&lt;br /&gt;
| '''Audio Directory'''. Always &amp;quot;Audio/.&amp;quot; Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 + D&lt;br /&gt;
| '''N'''&lt;br /&gt;
| '''Audio Group Name'''. Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 + D + N&lt;br /&gt;
|colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Metroid Prime 2 ====&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''; always 1}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| D&lt;br /&gt;
| '''Audio Group Name'''. Zero-terminated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Chunk 1 size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Chunk 2 size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sound metadata chunk size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 + D&lt;br /&gt;
| 4&lt;br /&gt;
| '''ADPCM chunk size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 + D&lt;br /&gt;
| colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== MusyX chunks ===&lt;br /&gt;
&lt;br /&gt;
After the AGSC header, there are four chunks: the Pool chunk, the Properties chunk, the Sample chunk and the Sample Directory chunk.  Each chunk is originally a file created with muconv2, a tool that comes with MusyX's SDK.  Muconv2 takes the original project file and its associated sound assests and converts them into file formats that are read by the Gamecube's MusyX audio engine.  Retro took these four separate files and cooked them into the final AGSC files.&lt;br /&gt;
&lt;br /&gt;
==== POOL chunk ====&lt;br /&gt;
&lt;br /&gt;
The Pool chunk denotes MusyX's &amp;quot;SoundMacros&amp;quot;, small scripts that apply various effects and commands on the sounds in the game.  The chunk first calls out a command ID then the parameters of that particular command, which varies.&lt;br /&gt;
&lt;br /&gt;
Every 4 bytes is in little endian, so to read the data as originally formatted by the MusyX SDK before it was converted, take each long (4 bytes) and change to big endian.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1&lt;br /&gt;
| '''Command ID''' (varies; there are 79 known commands in the MusyX audio engine.)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 1&lt;br /&gt;
| '''Command argument''' (varies between commands)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 1&lt;br /&gt;
| '''Command argument''' (varies between commands)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 1 &lt;br /&gt;
| '''Command argument''' (varies between commands)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 1&lt;br /&gt;
| ''Flip next four bytes'' '''Command argument''' (varies between commands)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 1&lt;br /&gt;
| '''Command argument''' (varies between commands)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 1&lt;br /&gt;
| '''Command argument''' (varies between commands)&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 1 &lt;br /&gt;
| '''Command argument''' (varies between commands)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Soundmacro terminates when the END command is read.  The command ID for END is 0 and has no command arguments, so when 0x00000000 is read, start the next SoundMacro.  The entire chunk terminates when 0xFFFF is read. &lt;br /&gt;
&lt;br /&gt;
==== PROJ chunk ====&lt;br /&gt;
&lt;br /&gt;
The Project properties chunk contains values for the sounds, including priority, polyphony, volume, etc.&lt;br /&gt;
&lt;br /&gt;
==== SAMP chunk ====&lt;br /&gt;
&lt;br /&gt;
The Sample chunk is all the sound data encoded using the standard Gamecube DSP ADPCM codec.  It can be decoded the same way as a [[DSP (File Format)|DSP]] file. Each sound's size is padded to 32 bytes before the next sound's data begins.&lt;br /&gt;
&lt;br /&gt;
==== SDIR chunk ====&lt;br /&gt;
&lt;br /&gt;
The Sample Directory chunk (chunk 4 in Metroid Prime, chunk 3 in Metroid Prime 2) is made up of two sets of tables. The structure of both these tables is identical between both games.&lt;br /&gt;
&lt;br /&gt;
===== Table A =====&lt;br /&gt;
&lt;br /&gt;
The first metadata table has one entry per sound, and is terminated with 0xFFFFFFFF; since there's no known sound count anywhere in the file, the only way to read this correctly is to read until you reach the terminator value. Each entry is 0x20 bytes long.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sound ID''' (note: not 100% confirmed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| Padding.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Sound start offset''', relative to the start of the ADPCM chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''; appears to always be 0x3C00}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 2&lt;br /&gt;
| '''Sample rate'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Number of samples'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Loop start sample'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| '''Loop length''', in samples. To get the loop end sample, add this to the start sample and subtract 1.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| '''Table B entry offset''', relative to the start of the sound metadata chunk&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Table B =====&lt;br /&gt;
&lt;br /&gt;
These are accessed through the offsets in table A's entries; note that it might not match the sound count, because the same entry in this table can be used with multiple sounds. Each entry is 0x28 bytes long.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 2 &amp;amp;times; 16&lt;br /&gt;
| '''Decode coefficients'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ADPCM Data ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
* [https://drive.google.com/file/d/0B9MLV21H7SDvemgwN1daYnliSjA/view?usp=sharing Prime Audio Decoder] by Parax will dump all sound effects contained in a given AGSC file.&lt;br /&gt;
&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Audio]]&lt;br /&gt;
[[Category:Metroid Prime]]&lt;br /&gt;
[[Category:Metroid Prime 2: Echoes]]&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=610</id>
		<title>User:MrSinistar/Sandbox</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=610"/>
				<updated>2015-02-01T01:17:18Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;AGSC uses MusyX data for the audio engine.  Each sound has it's own &amp;quot;SoundMacro&amp;quot; and properties.  The '''pool chunk''' is where the soundmacros are located.  SoundMacros are small scripts that control how sounds are played in game, like pitch or vibrato or fade outs.  Here's a description of the pool chunk:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Header size''' Looks like it's always 10&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Macro size'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 2&lt;br /&gt;
| '''Macro ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| colspan=2 {{unknown|Macro data, needs more research}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
STRG Commands are similar to CSS syntax.  A ; terminates the command.  &amp;amp; begins the command, so for example, &amp;amp;just=center;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| just  &lt;br /&gt;
| center&lt;br /&gt;
| Justifies text&lt;br /&gt;
|-&lt;br /&gt;
| image&lt;br /&gt;
| SI,0.70,0.68,[[TXTR (File Format)|TXTR]] ID&lt;br /&gt;
| Displays an image.  SI = Single Image? S,T and finally TXTR ID.  Animation = SA, Animation Speed, S,T, TXTR ID, TXTR ID&lt;br /&gt;
|-&lt;br /&gt;
| main-color&lt;br /&gt;
| Hex Color Code&lt;br /&gt;
| Changes color of text.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center; margin-bottom:20px; float:center; border:1px solid; box-shadow: 0 0 5px #6DBACD; border-radius:6px; border-color:#6dbacd;&amp;quot;  ! width=&amp;quot;45%&amp;quot;&lt;br /&gt;
|[[File:Powercannon_render3.png|200px]]&lt;br /&gt;
|'''Help us research and document!  Join the discussion at: [https://m2k2.taigaforum.com/post/metroid_prime_hacking_research.html Metroid Prime Hacking Research thread @ Metroid2002.com]'''&lt;br /&gt;
{|align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center;&amp;quot;&lt;br /&gt;
|[[File:Morphball_wire.png|50px|link=Category:Major research needed]]&lt;br /&gt;
|[[File:Morphball_wirerender.png|50px|link=Category:Moderate research needed]]&lt;br /&gt;
|[[File:Morphball_render.png|50px|link=Category:Minor research needed]]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Major research needed|'''File formats that need major research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Moderate research needed|'''File formats that need moderate research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Minor research needed|'''File formats that need minor research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=File:Scan_positions2.png&amp;diff=609</id>
		<title>File:Scan positions2.png</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=File:Scan_positions2.png&amp;diff=609"/>
				<updated>2015-01-31T20:58:18Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: MrSinistar uploaded a new version of File:Scan positions2.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=File:Scan_positions1.png&amp;diff=608</id>
		<title>File:Scan positions1.png</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=File:Scan_positions1.png&amp;diff=608"/>
				<updated>2015-01-31T20:57:53Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: MrSinistar uploaded a new version of File:Scan positions1.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=523</id>
		<title>User:MrSinistar/Sandbox</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=523"/>
				<updated>2015-01-28T10:13:21Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;STRG Commands are similar to CSS syntax.  A ; terminates the command.  &amp;amp; begins the command, so for example, &amp;amp;just=center;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| just  &lt;br /&gt;
| center&lt;br /&gt;
| Justifies text&lt;br /&gt;
|-&lt;br /&gt;
| image&lt;br /&gt;
| SI,0.70,0.68,[[TXTR (File Format)|TXTR]] ID&lt;br /&gt;
| Displays an image.  SI = Single Image? S,T and finally TXTR ID.  Animation = SA, Animation Speed, S,T, TXTR ID, TXTR ID&lt;br /&gt;
|-&lt;br /&gt;
| main-color&lt;br /&gt;
| Hex Color Code&lt;br /&gt;
| Changes color of text.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center; margin-bottom:20px; float:center; border:1px solid; box-shadow: 0 0 5px #6DBACD; border-radius:6px; border-color:#6dbacd;&amp;quot;  ! width=&amp;quot;45%&amp;quot;&lt;br /&gt;
|[[File:Powercannon_render3.png|200px]]&lt;br /&gt;
|'''Help us research and document!  Join the discussion at: [https://m2k2.taigaforum.com/post/metroid_prime_hacking_research.html Metroid Prime Hacking Research thread @ Metroid2002.com]'''&lt;br /&gt;
{|align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center;&amp;quot;&lt;br /&gt;
|[[File:Morphball_wire.png|50px|link=Category:Major research needed]]&lt;br /&gt;
|[[File:Morphball_wirerender.png|50px|link=Category:Moderate research needed]]&lt;br /&gt;
|[[File:Morphball_render.png|50px|link=Category:Minor research needed]]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Major research needed|'''File formats that need major research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Moderate research needed|'''File formats that need moderate research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Minor research needed|'''File formats that need minor research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=522</id>
		<title>User:MrSinistar/Sandbox</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=User:MrSinistar/Sandbox&amp;diff=522"/>
				<updated>2015-01-28T10:12:30Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;STRG Commands are similar to CSS syntax.  A ; terminates the command.  &amp;amp; begins the command, so for example, &amp;amp;just=center;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| just  &lt;br /&gt;
| center&lt;br /&gt;
| Justifies text&lt;br /&gt;
|-&lt;br /&gt;
| image&lt;br /&gt;
| SI,0.70,0.68,[[TXTR (File Format)|TXTR]] ID&lt;br /&gt;
| Displays an image.  SI = Single Image? S,T and finally TXTR ID.&lt;br /&gt;
|-&lt;br /&gt;
| main-color&lt;br /&gt;
| Hex Color Code&lt;br /&gt;
| Changes color of text.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center; margin-bottom:20px; float:center; border:1px solid; box-shadow: 0 0 5px #6DBACD; border-radius:6px; border-color:#6dbacd;&amp;quot;  ! width=&amp;quot;45%&amp;quot;&lt;br /&gt;
|[[File:Powercannon_render3.png|200px]]&lt;br /&gt;
|'''Help us research and document!  Join the discussion at: [https://m2k2.taigaforum.com/post/metroid_prime_hacking_research.html Metroid Prime Hacking Research thread @ Metroid2002.com]'''&lt;br /&gt;
{|align=&amp;quot;center&amp;quot; style=&amp;quot;text-align:center;&amp;quot;&lt;br /&gt;
|[[File:Morphball_wire.png|50px|link=Category:Major research needed]]&lt;br /&gt;
|[[File:Morphball_wirerender.png|50px|link=Category:Moderate research needed]]&lt;br /&gt;
|[[File:Morphball_render.png|50px|link=Category:Minor research needed]]&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Major research needed|'''File formats that need major research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Moderate research needed|'''File formats that need moderate research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|&amp;lt;small&amp;gt;[[:Category:Minor research needed|'''File formats that need minor research''']]&amp;lt;/small&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=SCAN_(Metroid_Prime)&amp;diff=489</id>
		<title>SCAN (Metroid Prime)</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=SCAN_(Metroid_Prime)&amp;diff=489"/>
				<updated>2015-01-27T09:56:32Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: Clean up&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''.SCAN file format''' describes scannable objects, and has references to several resources. It is a relatively simple format and has a static size.&lt;br /&gt;
&lt;br /&gt;
{{researchmajor|reason=Too many unknowns.}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
&lt;br /&gt;
The header is rather simple, and consists of the following:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Version'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Magic'''; always 0x0BADBEEF&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''[[FRME (File Format)|FRME]] ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''[[STRG (File Format)|STRG]] ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Scan Speed'''; 0 = Fast Scan, 1 = Slower Scan, usually found in boss fights&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Scan Type'''; 0 = No message, 1 = Pirate Data, 2 = Chozo Lore, 3 = Creatures, 4 = Research&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 1&lt;br /&gt;
| '''Red Scan Symbol Flag'''; 0 = Orange symbol, 1 = Red symbol&lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Entry ==&lt;br /&gt;
[[File:Scan_positions1.png|thumb|300px|Offsets for the different scan images and their positions]]&lt;br /&gt;
[[File:Scan_positions2.png|thumb|300px]]&lt;br /&gt;
Following the header is an array of 4 structs which follow this format:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''[[TXTR (Metroid Prime)|TXTR]] ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''0.25 Float'''; when the scan download is 25% finished, display this image.  Another 25% is added on to the next float on the next image entry.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown (Fade in duration?)''' - long}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown''' - long}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown''' - long}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown''' - long}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown''' - float}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This pattern repeats, however the next image will be displayed on the right.  The third image will be displayed on the right again but for smaller pictures and finally, the fourth image will be displayed on the bottom left corner, again for use for smaller pictures.  The float increases with every entry, so the next image will be .50, the third will be .75 and finally the last image will load at 1, when the scan finishes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Metroid Prime]]&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=SCAN_(Metroid_Prime)&amp;diff=488</id>
		<title>SCAN (Metroid Prime)</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=SCAN_(Metroid_Prime)&amp;diff=488"/>
				<updated>2015-01-27T09:55:47Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: /* Entry */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''.SCAN file format''' describes scannable objects, and has references to several resources. It is a relatively simple format and has a static size.&lt;br /&gt;
&lt;br /&gt;
{{researchmajor|reason=Too many unknowns.}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
&lt;br /&gt;
The header is rather simple, and consists of the following:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Version'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Magic'''; always 0x0BADBEEF&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''[[FRME (File Format)|FRME]] ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''[[STRG (File Format)|STRG]] ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Scan Speed'''; 0 = Fast Scan, 1 = Slower Scan, usually found in boss fights&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Scan Type'''; 0 = No message, 1 = Pirate Data, 2 = Chozo Lore, 3 = Creatures, 4 = Research&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 1&lt;br /&gt;
| '''Red Scan Symbol Flag'''; 0 = Orange symbol, 1 = Red symbol&lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Entry ==&lt;br /&gt;
&lt;br /&gt;
Following the header is an array of 4 structs which follow this format:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''[[TXTR (Metroid Prime)|TXTR]] ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''0.25 Float'''; when the scan download is 25% finished, display this image.  Another 25% is added on to the next float on the next image entry.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown (Fade in duration?)''' - long}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown''' - long}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown''' - long}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown''' - long}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown''' - float}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:Scan_positions1.png|thumb|300px|Offsets for the different scan images and their positions]]&lt;br /&gt;
[[File:Scan_positions2.png|thumb|300px]]&lt;br /&gt;
&lt;br /&gt;
This pattern repeats, however the next image will be displayed on the right.  The third image will be displayed on the right again but for smaller pictures and finally, the fourth image will be displayed on the bottom left corner, again for use for smaller pictures.  The float increases with every entry, so the next image will be .50, the third will be .75 and finally the last image will load at 1, when the scan finishes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Metroid Prime]]&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=File:Scan_positions2.png&amp;diff=487</id>
		<title>File:Scan positions2.png</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=File:Scan_positions2.png&amp;diff=487"/>
				<updated>2015-01-27T09:53:40Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=File:Scan_positions1.png&amp;diff=486</id>
		<title>File:Scan positions1.png</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=File:Scan_positions1.png&amp;diff=486"/>
				<updated>2015-01-27T09:53:19Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=SCAN_(Metroid_Prime)&amp;diff=485</id>
		<title>SCAN (Metroid Prime)</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=SCAN_(Metroid_Prime)&amp;diff=485"/>
				<updated>2015-01-27T09:42:49Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: /* Entry */ Discovered the layout of images and how the floats work.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''.SCAN file format''' describes scannable objects, and has references to several resources. It is a relatively simple format and has a static size.&lt;br /&gt;
&lt;br /&gt;
{{researchmajor|reason=Too many unknowns.}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
&lt;br /&gt;
The header is rather simple, and consists of the following:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Version'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Magic'''; always 0x0BADBEEF&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''[[FRME (File Format)|FRME]] ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''[[STRG (File Format)|STRG]] ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Scan Speed'''; 0 = Fast Scan, 1 = Slower Scan, usually found in boss fights&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Scan Type'''; 0 = No message, 1 = Pirate Data, 2 = Chozo Lore, 3 = Creatures, 4 = Research&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 1&lt;br /&gt;
| '''Red Scan Symbol Flag'''; 0 = Orange symbol, 1 = Red symbol&lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Entry ==&lt;br /&gt;
&lt;br /&gt;
Following the header is an array of 4 structs which follow this format:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''[[TXTR (Metroid Prime)|TXTR]] ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''0.25 Float'''; when the scan download is 25% finished, display this image.  Another 25% is added on to the next float on the next image entry.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown (Fade in duration?)''' - long}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown''' - long}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown''' - long}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown''' - long}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown''' - float}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This pattern repeats, however the next image will be displayed on the right.  The third image will be displayed on the right again but for smaller pictures and finally, the fourth image will be displayed on the bottom left corner, again for use for smaller pictures.  The float increases with every entry, so the next image will be .50, the third will be .75 and finally the last image will load at 1, when the scan finishes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Metroid Prime]]&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=SCAN_(Metroid_Prime)&amp;diff=484</id>
		<title>SCAN (Metroid Prime)</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=SCAN_(Metroid_Prime)&amp;diff=484"/>
				<updated>2015-01-27T08:40:56Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: SCAN Header is complete!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''.SCAN file format''' describes scannable objects, and has references to several resources. It is a relatively simple format and has a static size.&lt;br /&gt;
&lt;br /&gt;
{{researchmajor|reason=Too many unknowns.}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
&lt;br /&gt;
The header is rather simple, and consists of the following:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Version'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Magic'''; always 0x0BADBEEF&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''[[FRME (File Format)|FRME]] ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''[[STRG (File Format)|STRG]] ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| '''Scan Speed'''; 0 = Fast Scan, 1 = Slower Scan, usually found in boss fights&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Scan Type'''; 0 = No message, 1 = Pirate Data, 2 = Chozo Lore, 3 = Creatures, 4 = Research&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 1&lt;br /&gt;
| '''Red Scan Symbol Flag'''; 0 = Orange symbol, 1 = Red symbol&lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Entry ==&lt;br /&gt;
&lt;br /&gt;
Following the header is an array of 4 structs which follow this format:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''[[TXTR (Metroid Prime)|TXTR]] ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown''' - float}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown''' - long}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown''' - long}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown''' - long}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown''' - long}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown''' - float}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Metroid Prime]]&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=SCAN_(Metroid_Prime)&amp;diff=483</id>
		<title>SCAN (Metroid Prime)</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=SCAN_(Metroid_Prime)&amp;diff=483"/>
				<updated>2015-01-27T08:01:45Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: Thanks to Antidote for helping crack this format even further!  I confirmed hex edits in Dolphin and found the red symbol flag.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''.SCAN file format''' describes scannable objects, and has references to several resources. It is a relatively simple format and has a static size.&lt;br /&gt;
&lt;br /&gt;
{{researchmajor|reason=Too many unknowns.}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Header ==&lt;br /&gt;
&lt;br /&gt;
The header is rather simple, and consists of the following:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''Version'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| '''Magic'''; always 0x0BADBEEF&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| '''[[FRME (File Format)|FRME]] ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| '''[[STRG (File Format)|STRG]] ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown'''; usually 0}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| '''Scan Type'''; 0 = No message, 1 = Pirate Data, 2 = Chozo Lore, 3 = Creatures, 4 = Research&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 1&lt;br /&gt;
| '''Red Scan Symbol Flag'''; 0 = Orange symbol, 1 = Red symbol&lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| colspan=2 {{unknown|End of header}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Entry ==&lt;br /&gt;
&lt;br /&gt;
Following the header is an array of 4 structs which follow this format:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 4&lt;br /&gt;
| '''[[TXTR (Metroid Prime)|TXTR]] ID'''&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown''' - float}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown''' - long}}&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown''' - long}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown''' - long}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown''' - long}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| {{unknown|'''Unknown''' - float}}&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| colspan=2 {{unknown|End of entry}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:File Formats]]&lt;br /&gt;
[[Category:Metroid Prime]]&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=Template_talk:Todo&amp;diff=443</id>
		<title>Template talk:Todo</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=Template_talk:Todo&amp;diff=443"/>
				<updated>2015-01-26T15:33:06Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: Created page with &amp;quot;I can whip up some Varia suit colors for this template and icon later today. --~~~~&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I can whip up some Varia suit colors for this template and icon later today. --[[User:MrSinistar|MrSinistar]] ([[User talk:MrSinistar|talk]]) 09:33, 26 January 2015 (CST)&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	<entry>
		<id>http://www.metroid2002.com/retromodding/index.php?title=Retro_Modding_Wiki:About&amp;diff=406</id>
		<title>Retro Modding Wiki:About</title>
		<link rel="alternate" type="text/html" href="http://www.metroid2002.com/retromodding/index.php?title=Retro_Modding_Wiki:About&amp;diff=406"/>
				<updated>2015-01-26T05:50:08Z</updated>
		
		<summary type="html">&lt;p&gt;MrSinistar: Created page! Yay for talking in the third person!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:RetroModding.png|right|300px]]'''Retro Modding Wiki''' is the definitive resource containing all of the information gathered on formats used throughout Retro Studios' games.  These games are, of course, the critically-acclaimed Metroid Prime Trilogy and the Donkey Kong Country Returns games.  Our goal is to have a complete understanding of every file format and function in Retro Studio's games so that we can build level editors, import brand new assets, and create mods.&lt;br /&gt;
&lt;br /&gt;
If you want to contribute and help us research these game files, [[Special:UserLogin|create an account]] and be a part of the largest community devoted to modding Metroid Prime and Donkey Kong Country Returns.  [https://m2k2.taigaforum.com/post/metroid_prime_hacking_research.html Be sure to also check out our forum posts as well!] &lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
RMW started out as a [https://m2k2.taigaforum.com/post/metroid_prime_hacking_research.html forum post about hacking and modding Metroid Prime] created by [[User:Parax0|Paraxade]].  For the very first time since Metroid Prime's release in 2002, more progress has been made than ever before on hacking and modifying the Metroid Prime series.  &lt;br /&gt;
&lt;br /&gt;
Several months after the forum post, so much progress had been made, it had become rather difficult to find information and collaborate on hacking files, so it was decided that a repository or a central hub of information would be needed to track down all the file formats and progress made.  Since Retro Studios, the team behind the Metroid Prime Trilogy and Donkey Kong Country Returns series, utilizes the same game engine for all of their games, we chose Retro Modding Wiki to name our resource as all this information encompasses all of their games.&lt;br /&gt;
&lt;br /&gt;
On January 22rd, [[User:Nate|Nate]], owner of Metroid2002.com, was gracious enough to host this wiki on his website.  Several contributors from the original forum including [[User:Antitote|Antidote]], [[User:Bearborg|Bearborg]], [[User:MrSinistar|MrSinistar]], [[User:Embyr 75|Embyr 75]] and several others soon joined to further support this challenging hacking endeavor.&lt;/div&gt;</summary>
		<author><name>MrSinistar</name></author>	</entry>

	</feed>