<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.multimedia.cx/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Espes</id>
	<title>MultimediaWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.multimedia.cx/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Espes"/>
	<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php/Special:Contributions/Espes"/>
	<updated>2026-08-19T18:16:50Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.5</generator>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=XMA&amp;diff=14265</id>
		<title>XMA</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=XMA&amp;diff=14265"/>
		<updated>2012-12-09T15:09:03Z</updated>

		<summary type="html">&lt;p&gt;Espes: Samples link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Extension: xma&lt;br /&gt;
* Company: [[Microsoft]]&lt;br /&gt;
* Samples: http://samples.mplayerhq.hu/game-formats/xma/&lt;br /&gt;
* http://en.wikipedia.org/wiki/XMA_(audio_format)&lt;br /&gt;
&lt;br /&gt;
XMA is the audio container/codec format used on the [[Microsoft Xbox]] 360 console. It is thought to be based on [[Windows Media Audio Pro|WMA Pro]].&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
*[http://hcs64.com/mboard/forum.php?showthread=14818 Discussion on HCS Forum]&lt;br /&gt;
*&amp;quot;xmaencode.exe&amp;quot; from the Xbox 360 XDK provides encoding and (broken?) decoding.&lt;br /&gt;
*[http://www.ctpax-x.ru/index.php?goto=files&amp;amp;show=24 ToWav.exe] is a (closed source) independent decoder.&lt;br /&gt;
**It is packed with UPX. 'mudlord' has unpacked it and annotated the Delphi calls: [http://mudlord.info/crap/re/towav_unpacked.rar towav_unpacked.rar]&lt;br /&gt;
**It might have just been linked to xmaencoder.lib from an old XDK...&lt;br /&gt;
*[http://hcs64.com/files/xma_parse011.zip xma_parse] exists to parse and repack the steam for files that ToWav breaks on.&lt;br /&gt;
*[http://hcs64.com/files/xma_setup.txt xma_setup.txt] is an annotated disassembly of the xma_setup routine (from xmaencode?).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Game Formats]]&lt;br /&gt;
[[Category:Audio Codecs]]&lt;br /&gt;
[[Category:Undiscovered Audio Codecs]]&lt;/div&gt;</summary>
		<author><name>Espes</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=XMV&amp;diff=14264</id>
		<title>XMV</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=XMV&amp;diff=14264"/>
		<updated>2012-12-09T14:54:26Z</updated>

		<summary type="html">&lt;p&gt;Espes: Link to the ffmpeg debuxer, and I doubt the Microsoft code dump is 'legal'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Extension: xmv&lt;br /&gt;
* Company: [[Microsoft]]&lt;br /&gt;
* Samples: http://samples.mplayerhq.hu/game-formats/xmv/&lt;br /&gt;
&lt;br /&gt;
XMV is the audio/video container format used on the [[Microsoft Xbox]] console. It is reportedly similar to [[ASF]] and typically contains [[WMV2]] video at 640x480 29.97, and CBR audio at 128k.&lt;br /&gt;
&lt;br /&gt;
An open source demuxer exists in FFmpeg/libav: http://git.videolan.org/gitweb.cgi/ffmpeg.git/?p=ffmpeg.git;a=blob_plain;f=libavformat/xmv.c&lt;br /&gt;
&lt;br /&gt;
Copyrighted Microsoft source code for a decoder/demuxer is also available: http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1097094&amp;amp;group_id=53761&amp;amp;atid=471491&lt;br /&gt;
&lt;br /&gt;
See also http://thread.gmane.org/gmane.comp.video.ffmpeg.devel/25207/focus=25224 and http://www.maxconsole.net/?mode=news&amp;amp;newsid=411 for hints/tips&lt;br /&gt;
&lt;br /&gt;
== File Format ==&lt;br /&gt;
All multi-byte numbers of little endian.&lt;br /&gt;
&lt;br /&gt;
 bytes 0-11    unknown&lt;br /&gt;
 bytes 12-15   'xobX' ('Xbox' spelled backwards)&lt;br /&gt;
 bytes 16-19   unknown&lt;br /&gt;
 bytes 20-23   video width in pixels&lt;br /&gt;
 bytes 24-27   video height in pixels&lt;br /&gt;
 bytes 28-37   unknown&lt;br /&gt;
 bytes 38-39   number of audio channels&lt;br /&gt;
 bytes 40-43   audio sample rate&lt;br /&gt;
 bytes 44..    unknown&lt;br /&gt;
&lt;br /&gt;
== Games Using XMV ==&lt;br /&gt;
This is a list of games (usually Xbox games) known to use the XMV format.&lt;br /&gt;
&lt;br /&gt;
* [http://www.mobygames.com/game/xbox/lego-star-wars-ii-the-original-trilogy Lego Star Wars 2: The Original Trilogy (Xbox)]&lt;br /&gt;
* [http://www.mobygames.com/game/xbox/monopoly-party Monopoly Party (Xbox)]&lt;br /&gt;
* [http://www.mobygames.com/game/xbox/thrillville Thrillville (Xbox)] -- as .fmv files&lt;br /&gt;
* [http://www.mobygames.com/game/xbox/xiaolin-showdown Xiaolin Showdown (Xbox)] -- as .pss files&lt;br /&gt;
&lt;br /&gt;
[[Category:Container Formats]]&lt;br /&gt;
[[Category:Game Formats]]&lt;/div&gt;</summary>
		<author><name>Espes</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=XMA&amp;diff=14154</id>
		<title>XMA</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=XMA&amp;diff=14154"/>
		<updated>2012-08-22T16:20:32Z</updated>

		<summary type="html">&lt;p&gt;Espes: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Extension: xma&lt;br /&gt;
* Company: [[Microsoft]]&lt;br /&gt;
* http://en.wikipedia.org/wiki/XMA_(audio_format)&lt;br /&gt;
&lt;br /&gt;
XMA is the audio container/codec format used on the [[Microsoft Xbox]] 360 console. It is thought to be based on [[Windows Media Audio Pro|WMA Pro]].&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
*[http://hcs64.com/mboard/forum.php?showthread=14818 Discussion on HCS Forum]&lt;br /&gt;
*&amp;quot;xmaencode.exe&amp;quot; from the Xbox 360 XDK provides encoding and (broken?) decoding.&lt;br /&gt;
*[http://www.ctpax-x.ru/index.php?goto=files&amp;amp;show=24 ToWav.exe] is a (closed source) independent decoder.&lt;br /&gt;
**It is packed with UPX. 'mudlord' has unpacked it and annotated the Delphi calls: [http://mudlord.info/crap/re/towav_unpacked.rar towav_unpacked.rar]&lt;br /&gt;
**It might have just been linked to xmaencoder.lib from an old XDK...&lt;br /&gt;
*[http://hcs64.com/files/xma_parse011.zip xma_parse] exists to parse and repack the steam for files that ToWav breaks on.&lt;br /&gt;
*[http://hcs64.com/files/xma_setup.txt xma_setup.txt] is an annotated disassembly of the xma_setup routine (from xmaencode?).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Game Formats]]&lt;br /&gt;
[[Category:Audio Codecs]]&lt;br /&gt;
[[Category:Undiscovered Audio Codecs]]&lt;/div&gt;</summary>
		<author><name>Espes</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=XMA&amp;diff=14152</id>
		<title>XMA</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=XMA&amp;diff=14152"/>
		<updated>2012-08-19T10:56:33Z</updated>

		<summary type="html">&lt;p&gt;Espes: Add link to HCS thread&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Extension: xma&lt;br /&gt;
* Company: [[Microsoft]]&lt;br /&gt;
* http://en.wikipedia.org/wiki/XMA_(audio_format)&lt;br /&gt;
&lt;br /&gt;
XMA is the audio container/codec format used on the [[Microsoft Xbox]] 360 console. It is thought to be based on [[Windows Media Audio Pro|WMA Pro]].&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
*[http://hcs64.com/mboard/forum.php?showthread=14818 Discussion on HCS Forum]&lt;br /&gt;
*&amp;quot;xmaencode.exe&amp;quot; from the Xbox 360 XDK provides encoding and (broken?) decoding.&lt;br /&gt;
*[http://www.ctpax-x.ru/index.php?goto=files&amp;amp;show=24 ToWav.exe] is a (closed source) independent decoder.&lt;br /&gt;
**It is packed with UPX. 'mudlord' has unpacked it and annotated the Delphi calls: [http://mudlord.info/crap/re/towav_unpacked.rar towav_unpacked.rar]&lt;br /&gt;
*[http://hcs64.com/files/xma_parse011.zip xma_parse] exists to parse and repack the steam for files that ToWav breaks on.&lt;br /&gt;
*[http://hcs64.com/files/xma_setup.txt xma_setup.txt] is an annotated disassembly of the xma_setup routine (from xmaencode?).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Game Formats]]&lt;br /&gt;
[[Category:Audio Codecs]]&lt;br /&gt;
[[Category:Undiscovered Audio Codecs]]&lt;/div&gt;</summary>
		<author><name>Espes</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=XMA&amp;diff=14151</id>
		<title>XMA</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=XMA&amp;diff=14151"/>
		<updated>2012-08-19T10:53:16Z</updated>

		<summary type="html">&lt;p&gt;Espes: It is 'undiscovered'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Extension: xma&lt;br /&gt;
* Company: [[Microsoft]]&lt;br /&gt;
* http://en.wikipedia.org/wiki/XMA_(audio_format)&lt;br /&gt;
&lt;br /&gt;
XMA is the audio container/codec format used on the [[Microsoft Xbox]] 360 console. It is thought to be based on [[Windows Media Audio Pro|WMA Pro]].&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
*&amp;quot;xmaencode.exe&amp;quot; from the Xbox 360 XDK provides encoding and (broken?) decoding.&lt;br /&gt;
*[http://www.ctpax-x.ru/index.php?goto=files&amp;amp;show=24 ToWav.exe] is a (closed source) independent decoder.&lt;br /&gt;
**It is packed with UPX. 'mudlord' has unpacked it and annotated the Delphi calls: [http://mudlord.info/crap/re/towav_unpacked.rar towav_unpacked.rar]&lt;br /&gt;
*[http://hcs64.com/files/xma_parse011.zip xma_parse] exists to parse and repack the steam for files that ToWav breaks on.&lt;br /&gt;
*[http://hcs64.com/files/xma_setup.txt xma_setup.txt] is an annotated disassembly of the xma_setup routine (from xmaencode?).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Game Formats]]&lt;br /&gt;
[[Category:Audio Codecs]]&lt;br /&gt;
[[Category:Undiscovered Audio Codecs]]&lt;/div&gt;</summary>
		<author><name>Espes</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=XMA&amp;diff=14150</id>
		<title>XMA</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=XMA&amp;diff=14150"/>
		<updated>2012-08-19T10:50:10Z</updated>

		<summary type="html">&lt;p&gt;Espes: Derped a link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Extension: xma&lt;br /&gt;
* Company: [[Microsoft]]&lt;br /&gt;
* http://en.wikipedia.org/wiki/XMA_(audio_format)&lt;br /&gt;
&lt;br /&gt;
XMA is the audio container/codec format used on the [[Microsoft Xbox]] 360 console. It is thought to be based on [[Windows Media Audio Pro|WMA Pro]].&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
*&amp;quot;xmaencode.exe&amp;quot; from the Xbox 360 XDK provides encoding and (broken?) decoding.&lt;br /&gt;
*[http://www.ctpax-x.ru/index.php?goto=files&amp;amp;show=24 ToWav.exe] is a (closed source) independent decoder.&lt;br /&gt;
**It is packed with UPX. 'mudlord' has unpacked it and annotated the Delphi calls: [http://mudlord.info/crap/re/towav_unpacked.rar towav_unpacked.rar]&lt;br /&gt;
*[http://hcs64.com/files/xma_parse011.zip xma_parse] exists to parse and repack the steam for files that ToWav breaks on.&lt;br /&gt;
*[http://hcs64.com/files/xma_setup.txt xma_setup.txt] is an annotated disassembly of the xma_setup routine (from xmaencode?).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Game Formats]]&lt;br /&gt;
[[Category:Audio Codecs]]&lt;/div&gt;</summary>
		<author><name>Espes</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=XMA&amp;diff=14149</id>
		<title>XMA</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=XMA&amp;diff=14149"/>
		<updated>2012-08-19T10:49:46Z</updated>

		<summary type="html">&lt;p&gt;Espes: Link to some relevant resources&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Extension: xma&lt;br /&gt;
* Company: [[Microsoft]]&lt;br /&gt;
* http://en.wikipedia.org/wiki/XMA_(audio_format)&lt;br /&gt;
&lt;br /&gt;
XMA is the audio container/codec format used on the [[Microsoft Xbox]] 360 console. It is thought to be based on [[WMA Pro|Windows Media Audio Pro]].&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
*&amp;quot;xmaencode.exe&amp;quot; from the Xbox 360 XDK provides encoding and (broken?) decoding.&lt;br /&gt;
*[http://www.ctpax-x.ru/index.php?goto=files&amp;amp;show=24 ToWav.exe] is a (closed source) independent decoder.&lt;br /&gt;
**It is packed with UPX. 'mudlord' has unpacked it and annotated the Delphi calls: [http://mudlord.info/crap/re/towav_unpacked.rar towav_unpacked.rar]&lt;br /&gt;
*[http://hcs64.com/files/xma_parse011.zip xma_parse] exists to parse and repack the steam for files that ToWav breaks on.&lt;br /&gt;
*[http://hcs64.com/files/xma_setup.txt xma_setup.txt] is an annotated disassembly of the xma_setup routine (from xmaencode?).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Game Formats]]&lt;br /&gt;
[[Category:Audio Codecs]]&lt;/div&gt;</summary>
		<author><name>Espes</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=XACT&amp;diff=14148</id>
		<title>XACT</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=XACT&amp;diff=14148"/>
		<updated>2012-08-17T04:34:19Z</updated>

		<summary type="html">&lt;p&gt;Espes: It's also a Multimedia API, I guess&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Extensions: xwb, xsb, xgs&lt;br /&gt;
* Company: [[Microsoft]]&lt;br /&gt;
* Website: http://msdn.microsoft.com/en-us/library/bb174772.aspx&lt;br /&gt;
* Wikipedia article: https://en.wikipedia.org/wiki/Cross-platform_Audio_Creation_Tool&lt;br /&gt;
&lt;br /&gt;
Cross-platform Audio Creation Tool (XACT) is a audio framework released as part of the DirectX SDK.&lt;br /&gt;
&lt;br /&gt;
Distributed XACT projects consist of three file formats:&lt;br /&gt;
&lt;br /&gt;
== Wave Banks (.xwb) ==&lt;br /&gt;
A file format containing a collection of waves&lt;br /&gt;
* Waves - the raw wave data in [[Microsoft Wave|WAV]], [[Audio Interchange File Format|AIFF]], [[Windows Media Audio 9|WMA]], [[Microsoft xWMA|xWMA]] or [[XMA]] formats&lt;br /&gt;
&lt;br /&gt;
Open source parsers:&lt;br /&gt;
* [http://aluigi.altervista.org/papers.htm#unxwb unxwb]&lt;br /&gt;
* [https://github.com/mono/MonoGame/blob/develop3d/MonoGame.Framework/Audio/WaveBank.cs MonoGame]&lt;br /&gt;
&lt;br /&gt;
== Sound Banks (.xsb) ==&lt;br /&gt;
A collection of sounds and cues&lt;br /&gt;
&lt;br /&gt;
* Sounds - a sound has one or more waves together with properties like volume and pitch. Sounds are made up of tracks.&lt;br /&gt;
** Tracks - tracks are made up of events E.g. the simplest track has a Play Wave event&lt;br /&gt;
** Events - various actions that take place within a track. Actions include: Play, Stop, Set Volume, Set Pitch etc.&lt;br /&gt;
* Cues - a cue is used in code to trigger sounds. Each cue is made up of one or more sounds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sturct SoundBank {&lt;br /&gt;
    struct SoundBankHeader header;&lt;br /&gt;
&lt;br /&gt;
    struct WaveBankNameTableEntry[header.numWaveBanks] wavebankNames;&lt;br /&gt;
    struct SoundEntry[header.numSounds] sounds;&lt;br /&gt;
    struct SimpleCueEntry[header.numSimpleCues] simpleCues;&lt;br /&gt;
    struct ComplexCueEntry[header.numComplexCues] complexCues;&lt;br /&gt;
&lt;br /&gt;
    //...&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
struct SoundBankHeader {&lt;br /&gt;
    uint32_t magic; //               &amp;quot;SDBK&amp;quot;&lt;br /&gt;
    uint16_t toolVersion; //         0x2E&lt;br /&gt;
    uint16_t formatVersion; //       0x2B&lt;br /&gt;
    uint16_t crc; //      fcs16 checksum of all following data&lt;br /&gt;
    uint32_t lastModifiedLow;&lt;br /&gt;
    uint32_t lastModifiedHigh;&lt;br /&gt;
    uint8_t platform; //0x12         ??&lt;br /&gt;
    uint16_t numSimpleCues; //0x13&lt;br /&gt;
    uint16_t numComplexCues; //0x15&lt;br /&gt;
    uint16_t unkn3; //0x17&lt;br /&gt;
    uint16_t numTotalCues; //0x19    ??&lt;br /&gt;
    uint8_t numWaveBanks; //0x1b&lt;br /&gt;
    uint16_t numSounds; //0x1c&lt;br /&gt;
    uint32_t cueNameTableLen; //0x1e&lt;br /&gt;
    &lt;br /&gt;
    uint32_t simpleCuesOffset; //0x22&lt;br /&gt;
    uint32_t complexCuesOffset; //0x26&lt;br /&gt;
    uint32_t cueNamesOffset; //0x2a&lt;br /&gt;
    uint32_t unknOffset; //0x2e&lt;br /&gt;
    uint32_t variationTablesOffset; //0x32&lt;br /&gt;
    uint32_t unknOffset2; //0x36&lt;br /&gt;
    uint32_t waveBankNameTableOffset; //0x3a&lt;br /&gt;
    uint32_t cueNameHashTableOffset; //0x3e    16-bit hashes each&lt;br /&gt;
    uint32_t cueNameHashValsOffset; //0x42&lt;br /&gt;
    uint32_t soundsOffset; //0x46&lt;br /&gt;
    &lt;br /&gt;
    char name[64];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct WaveBankNameTableEntry {&lt;br /&gt;
    char name[64];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sturct SoundEntry {&lt;br /&gt;
    uint8_t flags; //0x0&lt;br /&gt;
    uint16_t category; //0x1      ???&lt;br /&gt;
    uint8_t unkn2; //0x3&lt;br /&gt;
    uint16_t volume; //0x4 maybe pitch&lt;br /&gt;
    uint8_t unkn3; //0x6&lt;br /&gt;
    uint16_t entryLength; //0x7&lt;br /&gt;
    &lt;br /&gt;
    if flags 1 (complex sound):&lt;br /&gt;
        //&amp;quot;clips&amp;quot;&lt;br /&gt;
        uint8_t numClips; //0x9&lt;br /&gt;
    else:&lt;br /&gt;
        uint16_t trackIndex; //0x9&lt;br /&gt;
        uint8_t waveBankIndex; //0x11&lt;br /&gt;
&lt;br /&gt;
    if flags in 2/4/8:&lt;br /&gt;
        uint16_t extraLen; //0x12&lt;br /&gt;
        //then a rpc table for each flag&lt;br /&gt;
    if flags in 16:&lt;br /&gt;
        uint16_t extraLen; //0x12     7&lt;br /&gt;
&lt;br /&gt;
        //dsp preset table&lt;br /&gt;
         uint8_t num;&lt;br /&gt;
         uint32_t unkn[num];&lt;br /&gt;
        &lt;br /&gt;
    &lt;br /&gt;
    if flags 1:&lt;br /&gt;
        struct {&lt;br /&gt;
            uint8_t unkn;&lt;br /&gt;
            uint32_t clipOffset;&lt;br /&gt;
            uint32_t unkn2;&lt;br /&gt;
        }[numClips]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sturct SoundClip {&lt;br /&gt;
    uint8_t numEvents;&lt;br /&gt;
    struct ClipEvent[numEvents];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
struct ClipEvent {&lt;br /&gt;
    uint32_t eventInfo; //event id in lower 5 bits&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//event id 1, size 16&lt;br /&gt;
struct EventPlayWave : ClipEvent {&lt;br /&gt;
    char unkn[4]; //0x4&lt;br /&gt;
    uint16_t trackIndex; //0x8&lt;br /&gt;
    uint8_t waveBank; //0xa&lt;br /&gt;
    uint8_t unkn; //0xb&lt;br /&gt;
    uint16_t unkn2; //0xc&lt;br /&gt;
    uint16_t unkn3; //0xe&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
//event id 3, size at least 13&lt;br /&gt;
struct EventPlayWaveVariation : ClipEvent {&lt;br /&gt;
    char unkn[5];&lt;br /&gt;
    int16_t unkn2;&lt;br /&gt;
    int16_t unkn3;&lt;br /&gt;
&lt;br /&gt;
    struct VariationTable; ///wtf!?&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//event id 4, size 40&lt;br /&gt;
struct EventPlayWavePitchVolumeFilterVariation : EventPlayWave {&lt;br /&gt;
    struct PitchVolumeFilterVariation;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
struct PitchVolumeFilterVariation {&lt;br /&gt;
    int16_t unkn;&lt;br /&gt;
    int16_t unkn2;&lt;br /&gt;
    uint8_t unkn3;&lt;br /&gt;
    uint8_t unkn4;&lt;br /&gt;
    float unkn5;&lt;br /&gt;
    float unkn6;&lt;br /&gt;
    float unkn7;&lt;br /&gt;
    float unkn8;&lt;br /&gt;
    uint16_t flags;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
struct SimpleCueEntry { //cue that maps straight to a sound&lt;br /&gt;
    uint8_t flags;&lt;br /&gt;
    uint32_t soundOffset;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
//size 15&lt;br /&gt;
struct ComplexCueEntry {&lt;br /&gt;
    uint8_t flags;&lt;br /&gt;
    uint32_t variationTableOffset;&lt;br /&gt;
    uint32_t transitionTableOffset;&lt;br /&gt;
    struct InstanceLimit;&lt;br /&gt;
    &lt;br /&gt;
};&lt;br /&gt;
struct InstanceLimit {&lt;br /&gt;
    uint32_t unkn;&lt;br /&gt;
    uint8_t unkn2;&lt;br /&gt;
    uint8_t unkn3; //dono if here or in ComplexCueEntry&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
enum VariationTableType {&lt;br /&gt;
    Wave,&lt;br /&gt;
    ?,&lt;br /&gt;
    ?,&lt;br /&gt;
    ?,&lt;br /&gt;
    CompactWave&lt;br /&gt;
}&lt;br /&gt;
struct VariationTable {&lt;br /&gt;
    uint32_t flags;&lt;br /&gt;
        //numEnties in lower 16 bits&lt;br /&gt;
        //flags in upper 16 bits&lt;br /&gt;
        //      -table type in bits 3,4,5&lt;br /&gt;
    uint8_t unkn;&lt;br /&gt;
    uint16_t unkn2;&lt;br /&gt;
    uint8_t unkn3;&lt;br /&gt;
    &lt;br /&gt;
    table 0:&lt;br /&gt;
    struct {&lt;br /&gt;
        uint16_t trackIndex; //?&lt;br /&gt;
        uint8_t waveBank;&lt;br /&gt;
        uint8_t weightMin; //?&lt;br /&gt;
        uint8_t weightMax; //?&lt;br /&gt;
    }[numEntries];&lt;br /&gt;
    &lt;br /&gt;
    table 1:&lt;br /&gt;
    struct {&lt;br /&gt;
        uint32_t soundOffset;&lt;br /&gt;
        uint8_t weightMin; //?&lt;br /&gt;
        uint8_t weightMax; //?&lt;br /&gt;
    }[numEntries]&lt;br /&gt;
    &lt;br /&gt;
    table 2:&lt;br /&gt;
    struct {&lt;br /&gt;
        uint32_t unkn;&lt;br /&gt;
        uint8_t weightMin; //?&lt;br /&gt;
        uint8_t weightMax; //?&lt;br /&gt;
    }[numEntries]&lt;br /&gt;
    &lt;br /&gt;
    table 3:&lt;br /&gt;
    struct {&lt;br /&gt;
        uint32_t soundOffset; //?&lt;br /&gt;
        float weightMin;&lt;br /&gt;
        float weightMax;&lt;br /&gt;
        uint32_t unkn;&lt;br /&gt;
    }[numEntries]&lt;br /&gt;
    &lt;br /&gt;
    table 4:&lt;br /&gt;
    struct {&lt;br /&gt;
        uint16_t trackIndex; //?&lt;br /&gt;
        uint8_t waveBank;&lt;br /&gt;
    }[numEntries];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
struct CueNameHashVal {&lt;br /&gt;
    uint32_t nameOffset;&lt;br /&gt;
    uint16_t unkn;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Global Settings (.xgs) ==&lt;br /&gt;
Defines rules and settings for sounds. &lt;br /&gt;
&lt;br /&gt;
* Categories - sounds can be assigned to a category (only one each) that specifies certain rules like number of instances along with settings like volume. You could create a category for the sounds of one character in your game so they all have the same volume. There are three predefined categories: global, default and Music.&lt;br /&gt;
* Variables - these can be defined in the design stage and then referenced by the programmer in code to control Run-Time Parameter Controls&lt;br /&gt;
** Run-Time Parameter Controls - also known as 'sliders'. These allow the control of sound parameters as the sound plays. For example they could be used to control the pitch of a car engine sound so as the accelerator is pressed the pitch is changed&lt;br /&gt;
* DSP Effect Path Presets (DSPs) - allow effects like reverb to be applied to sounds &lt;br /&gt;
* Compression Presets - compression can be applied to waves or wave banks&lt;br /&gt;
&lt;br /&gt;
Open source parsers:&lt;br /&gt;
* [https://github.com/espes/MonoGame/blob/develop3d/MonoGame.Framework/Audio/AudioEngine.cs MonoGame]&lt;br /&gt;
&lt;br /&gt;
[[Category:Container Formats]]&lt;br /&gt;
[[Category:Game Formats]]&lt;br /&gt;
[[Category:Multimedia APIs]]&lt;/div&gt;</summary>
		<author><name>Espes</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=Xact&amp;diff=14147</id>
		<title>Xact</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=Xact&amp;diff=14147"/>
		<updated>2012-08-17T04:30:32Z</updated>

		<summary type="html">&lt;p&gt;Espes: Xact moved to XACT: Capitalise&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[XACT]]&lt;/div&gt;</summary>
		<author><name>Espes</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=XACT&amp;diff=14146</id>
		<title>XACT</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=XACT&amp;diff=14146"/>
		<updated>2012-08-17T04:30:32Z</updated>

		<summary type="html">&lt;p&gt;Espes: Xact moved to XACT: Capitalise&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Extensions: xwb, xsb, xgs&lt;br /&gt;
* Company: [[Microsoft]]&lt;br /&gt;
* Website: http://msdn.microsoft.com/en-us/library/bb174772.aspx&lt;br /&gt;
* Wikipedia article: https://en.wikipedia.org/wiki/Cross-platform_Audio_Creation_Tool&lt;br /&gt;
&lt;br /&gt;
Cross-platform Audio Creation Tool (XACT) is a audio framework released as part of the DirectX SDK.&lt;br /&gt;
&lt;br /&gt;
Distributed XACT projects consist of three file formats:&lt;br /&gt;
&lt;br /&gt;
== Wave Banks (.xwb) ==&lt;br /&gt;
A file format containing a collection of waves&lt;br /&gt;
* Waves - the raw wave data in [[Microsoft Wave|WAV]], [[Audio Interchange File Format|AIFF]], [[Windows Media Audio 9|WMA]], [[Microsoft xWMA|xWMA]] or [[XMA]] formats&lt;br /&gt;
&lt;br /&gt;
Open source parsers:&lt;br /&gt;
* [http://aluigi.altervista.org/papers.htm#unxwb unxwb]&lt;br /&gt;
* [https://github.com/mono/MonoGame/blob/develop3d/MonoGame.Framework/Audio/WaveBank.cs MonoGame]&lt;br /&gt;
&lt;br /&gt;
== Sound Banks (.xsb) ==&lt;br /&gt;
A collection of sounds and cues&lt;br /&gt;
&lt;br /&gt;
* Sounds - a sound has one or more waves together with properties like volume and pitch. Sounds are made up of tracks.&lt;br /&gt;
** Tracks - tracks are made up of events E.g. the simplest track has a Play Wave event&lt;br /&gt;
** Events - various actions that take place within a track. Actions include: Play, Stop, Set Volume, Set Pitch etc.&lt;br /&gt;
* Cues - a cue is used in code to trigger sounds. Each cue is made up of one or more sounds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sturct SoundBank {&lt;br /&gt;
    struct SoundBankHeader header;&lt;br /&gt;
&lt;br /&gt;
    struct WaveBankNameTableEntry[header.numWaveBanks] wavebankNames;&lt;br /&gt;
    struct SoundEntry[header.numSounds] sounds;&lt;br /&gt;
    struct SimpleCueEntry[header.numSimpleCues] simpleCues;&lt;br /&gt;
    struct ComplexCueEntry[header.numComplexCues] complexCues;&lt;br /&gt;
&lt;br /&gt;
    //...&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
struct SoundBankHeader {&lt;br /&gt;
    uint32_t magic; //               &amp;quot;SDBK&amp;quot;&lt;br /&gt;
    uint16_t toolVersion; //         0x2E&lt;br /&gt;
    uint16_t formatVersion; //       0x2B&lt;br /&gt;
    uint16_t crc; //      fcs16 checksum of all following data&lt;br /&gt;
    uint32_t lastModifiedLow;&lt;br /&gt;
    uint32_t lastModifiedHigh;&lt;br /&gt;
    uint8_t platform; //0x12         ??&lt;br /&gt;
    uint16_t numSimpleCues; //0x13&lt;br /&gt;
    uint16_t numComplexCues; //0x15&lt;br /&gt;
    uint16_t unkn3; //0x17&lt;br /&gt;
    uint16_t numTotalCues; //0x19    ??&lt;br /&gt;
    uint8_t numWaveBanks; //0x1b&lt;br /&gt;
    uint16_t numSounds; //0x1c&lt;br /&gt;
    uint32_t cueNameTableLen; //0x1e&lt;br /&gt;
    &lt;br /&gt;
    uint32_t simpleCuesOffset; //0x22&lt;br /&gt;
    uint32_t complexCuesOffset; //0x26&lt;br /&gt;
    uint32_t cueNamesOffset; //0x2a&lt;br /&gt;
    uint32_t unknOffset; //0x2e&lt;br /&gt;
    uint32_t variationTablesOffset; //0x32&lt;br /&gt;
    uint32_t unknOffset2; //0x36&lt;br /&gt;
    uint32_t waveBankNameTableOffset; //0x3a&lt;br /&gt;
    uint32_t cueNameHashTableOffset; //0x3e    16-bit hashes each&lt;br /&gt;
    uint32_t cueNameHashValsOffset; //0x42&lt;br /&gt;
    uint32_t soundsOffset; //0x46&lt;br /&gt;
    &lt;br /&gt;
    char name[64];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct WaveBankNameTableEntry {&lt;br /&gt;
    char name[64];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sturct SoundEntry {&lt;br /&gt;
    uint8_t flags; //0x0&lt;br /&gt;
    uint16_t category; //0x1      ???&lt;br /&gt;
    uint8_t unkn2; //0x3&lt;br /&gt;
    uint16_t volume; //0x4 maybe pitch&lt;br /&gt;
    uint8_t unkn3; //0x6&lt;br /&gt;
    uint16_t entryLength; //0x7&lt;br /&gt;
    &lt;br /&gt;
    if flags 1 (complex sound):&lt;br /&gt;
        //&amp;quot;clips&amp;quot;&lt;br /&gt;
        uint8_t numClips; //0x9&lt;br /&gt;
    else:&lt;br /&gt;
        uint16_t trackIndex; //0x9&lt;br /&gt;
        uint8_t waveBankIndex; //0x11&lt;br /&gt;
&lt;br /&gt;
    if flags in 2/4/8:&lt;br /&gt;
        uint16_t extraLen; //0x12&lt;br /&gt;
        //then a rpc table for each flag&lt;br /&gt;
    if flags in 16:&lt;br /&gt;
        uint16_t extraLen; //0x12     7&lt;br /&gt;
&lt;br /&gt;
        //dsp preset table&lt;br /&gt;
         uint8_t num;&lt;br /&gt;
         uint32_t unkn[num];&lt;br /&gt;
        &lt;br /&gt;
    &lt;br /&gt;
    if flags 1:&lt;br /&gt;
        struct {&lt;br /&gt;
            uint8_t unkn;&lt;br /&gt;
            uint32_t clipOffset;&lt;br /&gt;
            uint32_t unkn2;&lt;br /&gt;
        }[numClips]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sturct SoundClip {&lt;br /&gt;
    uint8_t numEvents;&lt;br /&gt;
    struct ClipEvent[numEvents];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
struct ClipEvent {&lt;br /&gt;
    uint32_t eventInfo; //event id in lower 5 bits&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//event id 1, size 16&lt;br /&gt;
struct EventPlayWave : ClipEvent {&lt;br /&gt;
    char unkn[4]; //0x4&lt;br /&gt;
    uint16_t trackIndex; //0x8&lt;br /&gt;
    uint8_t waveBank; //0xa&lt;br /&gt;
    uint8_t unkn; //0xb&lt;br /&gt;
    uint16_t unkn2; //0xc&lt;br /&gt;
    uint16_t unkn3; //0xe&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
//event id 3, size at least 13&lt;br /&gt;
struct EventPlayWaveVariation : ClipEvent {&lt;br /&gt;
    char unkn[5];&lt;br /&gt;
    int16_t unkn2;&lt;br /&gt;
    int16_t unkn3;&lt;br /&gt;
&lt;br /&gt;
    struct VariationTable; ///wtf!?&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//event id 4, size 40&lt;br /&gt;
struct EventPlayWavePitchVolumeFilterVariation : EventPlayWave {&lt;br /&gt;
    struct PitchVolumeFilterVariation;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
struct PitchVolumeFilterVariation {&lt;br /&gt;
    int16_t unkn;&lt;br /&gt;
    int16_t unkn2;&lt;br /&gt;
    uint8_t unkn3;&lt;br /&gt;
    uint8_t unkn4;&lt;br /&gt;
    float unkn5;&lt;br /&gt;
    float unkn6;&lt;br /&gt;
    float unkn7;&lt;br /&gt;
    float unkn8;&lt;br /&gt;
    uint16_t flags;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
struct SimpleCueEntry { //cue that maps straight to a sound&lt;br /&gt;
    uint8_t flags;&lt;br /&gt;
    uint32_t soundOffset;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
//size 15&lt;br /&gt;
struct ComplexCueEntry {&lt;br /&gt;
    uint8_t flags;&lt;br /&gt;
    uint32_t variationTableOffset;&lt;br /&gt;
    uint32_t transitionTableOffset;&lt;br /&gt;
    struct InstanceLimit;&lt;br /&gt;
    &lt;br /&gt;
};&lt;br /&gt;
struct InstanceLimit {&lt;br /&gt;
    uint32_t unkn;&lt;br /&gt;
    uint8_t unkn2;&lt;br /&gt;
    uint8_t unkn3; //dono if here or in ComplexCueEntry&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
enum VariationTableType {&lt;br /&gt;
    Wave,&lt;br /&gt;
    ?,&lt;br /&gt;
    ?,&lt;br /&gt;
    ?,&lt;br /&gt;
    CompactWave&lt;br /&gt;
}&lt;br /&gt;
struct VariationTable {&lt;br /&gt;
    uint32_t flags;&lt;br /&gt;
        //numEnties in lower 16 bits&lt;br /&gt;
        //flags in upper 16 bits&lt;br /&gt;
        //      -table type in bits 3,4,5&lt;br /&gt;
    uint8_t unkn;&lt;br /&gt;
    uint16_t unkn2;&lt;br /&gt;
    uint8_t unkn3;&lt;br /&gt;
    &lt;br /&gt;
    table 0:&lt;br /&gt;
    struct {&lt;br /&gt;
        uint16_t trackIndex; //?&lt;br /&gt;
        uint8_t waveBank;&lt;br /&gt;
        uint8_t weightMin; //?&lt;br /&gt;
        uint8_t weightMax; //?&lt;br /&gt;
    }[numEntries];&lt;br /&gt;
    &lt;br /&gt;
    table 1:&lt;br /&gt;
    struct {&lt;br /&gt;
        uint32_t soundOffset;&lt;br /&gt;
        uint8_t weightMin; //?&lt;br /&gt;
        uint8_t weightMax; //?&lt;br /&gt;
    }[numEntries]&lt;br /&gt;
    &lt;br /&gt;
    table 2:&lt;br /&gt;
    struct {&lt;br /&gt;
        uint32_t unkn;&lt;br /&gt;
        uint8_t weightMin; //?&lt;br /&gt;
        uint8_t weightMax; //?&lt;br /&gt;
    }[numEntries]&lt;br /&gt;
    &lt;br /&gt;
    table 3:&lt;br /&gt;
    struct {&lt;br /&gt;
        uint32_t soundOffset; //?&lt;br /&gt;
        float weightMin;&lt;br /&gt;
        float weightMax;&lt;br /&gt;
        uint32_t unkn;&lt;br /&gt;
    }[numEntries]&lt;br /&gt;
    &lt;br /&gt;
    table 4:&lt;br /&gt;
    struct {&lt;br /&gt;
        uint16_t trackIndex; //?&lt;br /&gt;
        uint8_t waveBank;&lt;br /&gt;
    }[numEntries];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
struct CueNameHashVal {&lt;br /&gt;
    uint32_t nameOffset;&lt;br /&gt;
    uint16_t unkn;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Global Settings (.xgs) ==&lt;br /&gt;
Defines rules and settings for sounds. &lt;br /&gt;
&lt;br /&gt;
* Categories - sounds can be assigned to a category (only one each) that specifies certain rules like number of instances along with settings like volume. You could create a category for the sounds of one character in your game so they all have the same volume. There are three predefined categories: global, default and Music.&lt;br /&gt;
* Variables - these can be defined in the design stage and then referenced by the programmer in code to control Run-Time Parameter Controls&lt;br /&gt;
** Run-Time Parameter Controls - also known as 'sliders'. These allow the control of sound parameters as the sound plays. For example they could be used to control the pitch of a car engine sound so as the accelerator is pressed the pitch is changed&lt;br /&gt;
* DSP Effect Path Presets (DSPs) - allow effects like reverb to be applied to sounds &lt;br /&gt;
* Compression Presets - compression can be applied to waves or wave banks&lt;br /&gt;
&lt;br /&gt;
Open source parsers:&lt;br /&gt;
* [https://github.com/espes/MonoGame/blob/develop3d/MonoGame.Framework/Audio/AudioEngine.cs MonoGame]&lt;br /&gt;
&lt;br /&gt;
[[Category:Container Formats]]&lt;br /&gt;
[[Category:Game Formats]]&lt;/div&gt;</summary>
		<author><name>Espes</name></author>
	</entry>
	<entry>
		<id>https://wiki.multimedia.cx/index.php?title=XACT&amp;diff=14145</id>
		<title>XACT</title>
		<link rel="alternate" type="text/html" href="https://wiki.multimedia.cx/index.php?title=XACT&amp;diff=14145"/>
		<updated>2012-08-17T04:29:07Z</updated>

		<summary type="html">&lt;p&gt;Espes: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Extensions: xwb, xsb, xgs&lt;br /&gt;
* Company: [[Microsoft]]&lt;br /&gt;
* Website: http://msdn.microsoft.com/en-us/library/bb174772.aspx&lt;br /&gt;
* Wikipedia article: https://en.wikipedia.org/wiki/Cross-platform_Audio_Creation_Tool&lt;br /&gt;
&lt;br /&gt;
Cross-platform Audio Creation Tool (XACT) is a audio framework released as part of the DirectX SDK.&lt;br /&gt;
&lt;br /&gt;
Distributed XACT projects consist of three file formats:&lt;br /&gt;
&lt;br /&gt;
== Wave Banks (.xwb) ==&lt;br /&gt;
A file format containing a collection of waves&lt;br /&gt;
* Waves - the raw wave data in [[Microsoft Wave|WAV]], [[Audio Interchange File Format|AIFF]], [[Windows Media Audio 9|WMA]], [[Microsoft xWMA|xWMA]] or [[XMA]] formats&lt;br /&gt;
&lt;br /&gt;
Open source parsers:&lt;br /&gt;
* [http://aluigi.altervista.org/papers.htm#unxwb unxwb]&lt;br /&gt;
* [https://github.com/mono/MonoGame/blob/develop3d/MonoGame.Framework/Audio/WaveBank.cs MonoGame]&lt;br /&gt;
&lt;br /&gt;
== Sound Banks (.xsb) ==&lt;br /&gt;
A collection of sounds and cues&lt;br /&gt;
&lt;br /&gt;
* Sounds - a sound has one or more waves together with properties like volume and pitch. Sounds are made up of tracks.&lt;br /&gt;
** Tracks - tracks are made up of events E.g. the simplest track has a Play Wave event&lt;br /&gt;
** Events - various actions that take place within a track. Actions include: Play, Stop, Set Volume, Set Pitch etc.&lt;br /&gt;
* Cues - a cue is used in code to trigger sounds. Each cue is made up of one or more sounds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sturct SoundBank {&lt;br /&gt;
    struct SoundBankHeader header;&lt;br /&gt;
&lt;br /&gt;
    struct WaveBankNameTableEntry[header.numWaveBanks] wavebankNames;&lt;br /&gt;
    struct SoundEntry[header.numSounds] sounds;&lt;br /&gt;
    struct SimpleCueEntry[header.numSimpleCues] simpleCues;&lt;br /&gt;
    struct ComplexCueEntry[header.numComplexCues] complexCues;&lt;br /&gt;
&lt;br /&gt;
    //...&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
struct SoundBankHeader {&lt;br /&gt;
    uint32_t magic; //               &amp;quot;SDBK&amp;quot;&lt;br /&gt;
    uint16_t toolVersion; //         0x2E&lt;br /&gt;
    uint16_t formatVersion; //       0x2B&lt;br /&gt;
    uint16_t crc; //      fcs16 checksum of all following data&lt;br /&gt;
    uint32_t lastModifiedLow;&lt;br /&gt;
    uint32_t lastModifiedHigh;&lt;br /&gt;
    uint8_t platform; //0x12         ??&lt;br /&gt;
    uint16_t numSimpleCues; //0x13&lt;br /&gt;
    uint16_t numComplexCues; //0x15&lt;br /&gt;
    uint16_t unkn3; //0x17&lt;br /&gt;
    uint16_t numTotalCues; //0x19    ??&lt;br /&gt;
    uint8_t numWaveBanks; //0x1b&lt;br /&gt;
    uint16_t numSounds; //0x1c&lt;br /&gt;
    uint32_t cueNameTableLen; //0x1e&lt;br /&gt;
    &lt;br /&gt;
    uint32_t simpleCuesOffset; //0x22&lt;br /&gt;
    uint32_t complexCuesOffset; //0x26&lt;br /&gt;
    uint32_t cueNamesOffset; //0x2a&lt;br /&gt;
    uint32_t unknOffset; //0x2e&lt;br /&gt;
    uint32_t variationTablesOffset; //0x32&lt;br /&gt;
    uint32_t unknOffset2; //0x36&lt;br /&gt;
    uint32_t waveBankNameTableOffset; //0x3a&lt;br /&gt;
    uint32_t cueNameHashTableOffset; //0x3e    16-bit hashes each&lt;br /&gt;
    uint32_t cueNameHashValsOffset; //0x42&lt;br /&gt;
    uint32_t soundsOffset; //0x46&lt;br /&gt;
    &lt;br /&gt;
    char name[64];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct WaveBankNameTableEntry {&lt;br /&gt;
    char name[64];&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sturct SoundEntry {&lt;br /&gt;
    uint8_t flags; //0x0&lt;br /&gt;
    uint16_t category; //0x1      ???&lt;br /&gt;
    uint8_t unkn2; //0x3&lt;br /&gt;
    uint16_t volume; //0x4 maybe pitch&lt;br /&gt;
    uint8_t unkn3; //0x6&lt;br /&gt;
    uint16_t entryLength; //0x7&lt;br /&gt;
    &lt;br /&gt;
    if flags 1 (complex sound):&lt;br /&gt;
        //&amp;quot;clips&amp;quot;&lt;br /&gt;
        uint8_t numClips; //0x9&lt;br /&gt;
    else:&lt;br /&gt;
        uint16_t trackIndex; //0x9&lt;br /&gt;
        uint8_t waveBankIndex; //0x11&lt;br /&gt;
&lt;br /&gt;
    if flags in 2/4/8:&lt;br /&gt;
        uint16_t extraLen; //0x12&lt;br /&gt;
        //then a rpc table for each flag&lt;br /&gt;
    if flags in 16:&lt;br /&gt;
        uint16_t extraLen; //0x12     7&lt;br /&gt;
&lt;br /&gt;
        //dsp preset table&lt;br /&gt;
         uint8_t num;&lt;br /&gt;
         uint32_t unkn[num];&lt;br /&gt;
        &lt;br /&gt;
    &lt;br /&gt;
    if flags 1:&lt;br /&gt;
        struct {&lt;br /&gt;
            uint8_t unkn;&lt;br /&gt;
            uint32_t clipOffset;&lt;br /&gt;
            uint32_t unkn2;&lt;br /&gt;
        }[numClips]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sturct SoundClip {&lt;br /&gt;
    uint8_t numEvents;&lt;br /&gt;
    struct ClipEvent[numEvents];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
struct ClipEvent {&lt;br /&gt;
    uint32_t eventInfo; //event id in lower 5 bits&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//event id 1, size 16&lt;br /&gt;
struct EventPlayWave : ClipEvent {&lt;br /&gt;
    char unkn[4]; //0x4&lt;br /&gt;
    uint16_t trackIndex; //0x8&lt;br /&gt;
    uint8_t waveBank; //0xa&lt;br /&gt;
    uint8_t unkn; //0xb&lt;br /&gt;
    uint16_t unkn2; //0xc&lt;br /&gt;
    uint16_t unkn3; //0xe&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
//event id 3, size at least 13&lt;br /&gt;
struct EventPlayWaveVariation : ClipEvent {&lt;br /&gt;
    char unkn[5];&lt;br /&gt;
    int16_t unkn2;&lt;br /&gt;
    int16_t unkn3;&lt;br /&gt;
&lt;br /&gt;
    struct VariationTable; ///wtf!?&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//event id 4, size 40&lt;br /&gt;
struct EventPlayWavePitchVolumeFilterVariation : EventPlayWave {&lt;br /&gt;
    struct PitchVolumeFilterVariation;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
struct PitchVolumeFilterVariation {&lt;br /&gt;
    int16_t unkn;&lt;br /&gt;
    int16_t unkn2;&lt;br /&gt;
    uint8_t unkn3;&lt;br /&gt;
    uint8_t unkn4;&lt;br /&gt;
    float unkn5;&lt;br /&gt;
    float unkn6;&lt;br /&gt;
    float unkn7;&lt;br /&gt;
    float unkn8;&lt;br /&gt;
    uint16_t flags;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
struct SimpleCueEntry { //cue that maps straight to a sound&lt;br /&gt;
    uint8_t flags;&lt;br /&gt;
    uint32_t soundOffset;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
//size 15&lt;br /&gt;
struct ComplexCueEntry {&lt;br /&gt;
    uint8_t flags;&lt;br /&gt;
    uint32_t variationTableOffset;&lt;br /&gt;
    uint32_t transitionTableOffset;&lt;br /&gt;
    struct InstanceLimit;&lt;br /&gt;
    &lt;br /&gt;
};&lt;br /&gt;
struct InstanceLimit {&lt;br /&gt;
    uint32_t unkn;&lt;br /&gt;
    uint8_t unkn2;&lt;br /&gt;
    uint8_t unkn3; //dono if here or in ComplexCueEntry&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
enum VariationTableType {&lt;br /&gt;
    Wave,&lt;br /&gt;
    ?,&lt;br /&gt;
    ?,&lt;br /&gt;
    ?,&lt;br /&gt;
    CompactWave&lt;br /&gt;
}&lt;br /&gt;
struct VariationTable {&lt;br /&gt;
    uint32_t flags;&lt;br /&gt;
        //numEnties in lower 16 bits&lt;br /&gt;
        //flags in upper 16 bits&lt;br /&gt;
        //      -table type in bits 3,4,5&lt;br /&gt;
    uint8_t unkn;&lt;br /&gt;
    uint16_t unkn2;&lt;br /&gt;
    uint8_t unkn3;&lt;br /&gt;
    &lt;br /&gt;
    table 0:&lt;br /&gt;
    struct {&lt;br /&gt;
        uint16_t trackIndex; //?&lt;br /&gt;
        uint8_t waveBank;&lt;br /&gt;
        uint8_t weightMin; //?&lt;br /&gt;
        uint8_t weightMax; //?&lt;br /&gt;
    }[numEntries];&lt;br /&gt;
    &lt;br /&gt;
    table 1:&lt;br /&gt;
    struct {&lt;br /&gt;
        uint32_t soundOffset;&lt;br /&gt;
        uint8_t weightMin; //?&lt;br /&gt;
        uint8_t weightMax; //?&lt;br /&gt;
    }[numEntries]&lt;br /&gt;
    &lt;br /&gt;
    table 2:&lt;br /&gt;
    struct {&lt;br /&gt;
        uint32_t unkn;&lt;br /&gt;
        uint8_t weightMin; //?&lt;br /&gt;
        uint8_t weightMax; //?&lt;br /&gt;
    }[numEntries]&lt;br /&gt;
    &lt;br /&gt;
    table 3:&lt;br /&gt;
    struct {&lt;br /&gt;
        uint32_t soundOffset; //?&lt;br /&gt;
        float weightMin;&lt;br /&gt;
        float weightMax;&lt;br /&gt;
        uint32_t unkn;&lt;br /&gt;
    }[numEntries]&lt;br /&gt;
    &lt;br /&gt;
    table 4:&lt;br /&gt;
    struct {&lt;br /&gt;
        uint16_t trackIndex; //?&lt;br /&gt;
        uint8_t waveBank;&lt;br /&gt;
    }[numEntries];&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
struct CueNameHashVal {&lt;br /&gt;
    uint32_t nameOffset;&lt;br /&gt;
    uint16_t unkn;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Global Settings (.xgs) ==&lt;br /&gt;
Defines rules and settings for sounds. &lt;br /&gt;
&lt;br /&gt;
* Categories - sounds can be assigned to a category (only one each) that specifies certain rules like number of instances along with settings like volume. You could create a category for the sounds of one character in your game so they all have the same volume. There are three predefined categories: global, default and Music.&lt;br /&gt;
* Variables - these can be defined in the design stage and then referenced by the programmer in code to control Run-Time Parameter Controls&lt;br /&gt;
** Run-Time Parameter Controls - also known as 'sliders'. These allow the control of sound parameters as the sound plays. For example they could be used to control the pitch of a car engine sound so as the accelerator is pressed the pitch is changed&lt;br /&gt;
* DSP Effect Path Presets (DSPs) - allow effects like reverb to be applied to sounds &lt;br /&gt;
* Compression Presets - compression can be applied to waves or wave banks&lt;br /&gt;
&lt;br /&gt;
Open source parsers:&lt;br /&gt;
* [https://github.com/espes/MonoGame/blob/develop3d/MonoGame.Framework/Audio/AudioEngine.cs MonoGame]&lt;br /&gt;
&lt;br /&gt;
[[Category:Container Formats]]&lt;br /&gt;
[[Category:Game Formats]]&lt;/div&gt;</summary>
		<author><name>Espes</name></author>
	</entry>
</feed>