# Cross-platform Audio Creation Tool

Cross-platform Audio Creation Tool (XACT) is an audio programming library and engine released by Microsoft as part of the DirectX SDK. It is a high-level audio library for authoring/playing audio that is written to use Xaudio on the Xbox, DirectSound on Windows XP, and the new audio stack on Windows Vista and Windows 7. Xaudio is an Xbox-only API designed for optimal digital signal processing. XACT also includes X3DAudio, a spatialization helper library available on both platforms, Windows and the Xbox. XACT was originally developed for Xbox development, and was later modified to work for Microsoft Windows development as well.

## Overview

The original release of XACT was in 2002 and shipped as part of the Xbox SDK only and was originally called the "Xbox Audio Creation Tool". It was designed to allow sound designers and composers for the original Xbox console to have access and control of the powerful MCPx audio chip in the console, which previously could only be accessed through program code, via Xbox extensions to DirectSound. XACT was the first widely available game audio tool that allowed a sound designer to run a tool connected to a running game and modify the sounds in real time, as the game was running, and support easy streaming of audio data from the console hard drive.
Later, under the XNA initiative, it was re-written to work on both Windows and Xbox and renamed the "Cross-platform Audio Creation Tool" and included as part of the DirectX SDK.
Support for XACT has been carried over from DirectX to XNA. The XACT Audio Authoring Tool is also available in XNA Game Studio. With the release of Windows SDK for Windows 8 Developer Preview, XACT is no longer supported on Windows.
The XACT Audio Authoring Tool is a companion application used to organize audio assets into wave banks (single files containing multiple WAV files) and sound banks (single files containing instructions for playing the WAV files in wave banks). The wave banks and sound banks for a project are subsequently called by XACT from within the application.

## XACT sound creation features

* Support for the following formats: WAV, AIFF, XMA
** Note: also supports embedded loop points in WAV and AIFF formats
** 16 and 8 bit PCM data
* Supports Stereo and 5.1 speaker arrangements
* Organization of sounds
** Multiple audio files can be grouped together into Wave Banks (XWB extension)
** Cues and settings can be bundled with the Waves in Sound Banks (XSB extension)
* Auditioning
** Audio console window can be used to preview audio
** Audio settings can be adjusted in-game (with debug mode libraries)

## XACT API programming features

* The API allows the integration of the wave, sound and cue information from the creation phase
* In memory and streaming support
* Audio event notification
* Includes a code-driven API allowing lower level loading and playback of sounds without having to use all the XACT sound organisation features....

## XACT terminology and file types

* Sound Banks (.xsb) - a collection of sounds and cues.
** Sounds - a sound has one or more waves together with properties like volume and pitch. Sounds are made up of tracks.
*** Tracks - tracks are made up of events E.g. the simplest track has a Play Wave event
*** Events - various actions that take place within a track. Actions include: Play, Stop, Set Volume, Set Pitch etc.
** Cues - a cue is used in code to trigger sounds. Each cue is made up of one or more sounds
* Wave Banks (.xwb) - a file format containing a collection of waves
** Waves - the raw wave data in wav, aiff or xma format
* Global Settings (.xgs) - defines rules and settings for sounds.
** 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.
** Variables - these can be defined in the design stage and then referenced by the programmer in code to control Run-Time Parameter Controls
*** 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
** DSP Effect Path Presets (DSPs) - allow effects like reverb to be applied to sounds
** Compression Presets - compression can be applied to waves or wave banks