XAudio and XAudio2
If DirectSound has been updated, then why create a new game
audio API? The answer goes back to both the industry changes and the design
planning for Xbox 360.
When Xbox 360 was in its early design phases, we knew that
audio processing (except for data compression) was moving to an all-software
model. Drastic increases in processing power, combined with the flexibility and
ease of simply writing C code to do any arbitrary signal processing, made that
clear. What wasn’t clear was how to make it easy and straightforward for
developers to harness the flexibility that the game sound designers and
composers wanted for modern video games.
We took a hard look at DirectSound and realized that
DirectSound was really past its prime; another facelift wasn’t going to cut it
for Xbox 360. DirectSound’s metaphor of one-buffer-one-sound wasn’t up to the
job for today’s game audio any more than a graphics sprite engine would be up
to the job for today’s 3D graphics.
We needed a new audio API, designed from
the ground up as a programmable software audio engine. Armed with our vision of
what we wanted to enable, along with several years worth of suggestions from
the community, we created XAudio for Xbox 360.
Concurrent with development of Xbox 360, Windows Vista was
well into its own development. The Windows team developed a whole new audio
architecture, top to bottom. A key component in that audio architecture was LEAP,
Longhorn Extensible Audio Processor. (Longhorn was the codename for
Windows Vista.)
LEAP is a very powerful low-level graph-building audio
architecture that offers submixing, software-based DSP effects, and efficient
design—all of the things that XAudio for Xbox 360 was designed to do. Although
LEAP itself was not released as an API directly to developers, it serves as the
underlying audio engine for both DirectSound on Windows Vista and the Microsoft
Cross-Platform Audio Creation Tool (XACT) on both Windows XP and Windows Vista.
Well…. Xbox 360 launched, Windows Vista shipped, and we
turned ourselves back to the notion of a cross-platform, low-level replacement
for DirectSound. We had received good feedback on our XAudio API from Xbox 360
developers.
At the same time, the LEAP architecture lent itself to a more
streamlined and efficient engine with a few features that XAudio didn’t
provide, like multi-rate graph support. We took the best of both worlds, and
XAudio2 was born, taking the philosophy and style of the XAudio API design
coupled with the streamlined engine and features of LEAP.
So what is XAudio2? Simply put, it is a flexible,
cross-platform, low-level audio API designed to replace DirectSound for game
applications on Windows and replace XAudio on Xbox 360. It allows game
designers to create audio signal processing paths that range from simple wave
playback to complicated audio graphs with submixes and embedded software-based
DSP effects.
XAudio2 Features and Architecture
XAudio2 provides many features necessary for the creation of
modern game sound design:
- Cross platform between Xbox 360 and
Windows-based platforms, including Microsoft Windows XP and Windows Vista
-
Arbitrary levels of submixing
-
A simple streaming model
-
A software-based, dynamic DSP effects model,
both local and global
-
Simple C language code for arbitrary DSP
processing using xAPOs (audio processing objects)
-
Native compressed data support: XMA and xWMA on
Xbox 360, ADPCM and xWMA on Windows
-
A complement of DSP audio effects
- Fully transparent surround sound/3D audio
processing
- Clean separation of voices from data
-
Non-blocking processing suitable for multi-core,
multi-threaded systems
-
Efficient and optimized for Windows and Xbox 360
-
Optimized in-line filter on each voice
|