Games for Windows and the DirectX SDK blog

Technical tips, tricks, and news about game development for Microsoft platforms including desktop, Xbox, and UWP

Project maintained by walbourn Hosted on GitHub Pages — Theme by mattgraham
Home | Posts by Tag | Posts by Month

XDSP.H - Digital Signal Processing helper functions

audio, directxmath

Originally posted to Chuck Walbourn's Blog on MSDN,

The DirectX SDK (June 2010) release includes a little utility header, XDSP.H. This contains CPU-based functions for computing the Fast Fourier Transform (FFT) as well as some related multi-channel audio interleave/deinterleave functionality primarily used in writing custom xAPOs for XAUDIO2. The DirectX SDK version makes use of SSE intrinsics, which means it supports Windows x86 and x64 native code generation. This header is not included in the Windows SDK 8.0 (see “Where is the DirectX SDK?”). If writing a custom xAPO for Windows Store apps (a.k.a. Metro style apps), you also likely want to support the Windows RT (aka Windows on ARM) platform as well.

Attached to this post is a version of XDSP.H that uses DirectXMath and compiles for x86, x64, and ARM. It can be used with either Visual Studio 2012 (aka VS 11) or VS 2010 with the Windows 8.0 SDK, and compiles for both Win32 desktop applications and Windows Store apps.

Full documentation for XDSP can be found in the offline help for the DirectX SDK (June 2010) release. These functions are in the XDSP C++ namespace, and memory buffers provided to these functions must be 16-byte aligned.

Deinterleave Deinterleaves audio samples.
FFT Fast Fourier Transform with an arbitrary number of samples.
FFT4 Four sample Fast Fourier Transform.
FFT8 Eight sample Fast Fourier Transform.
FFT16 Sixteen sample Fast Fourier Transform.
IFFTDeinterleaved Inverse Fast Fourier Transform, plus interleaved multichannel audio.
FFTInitializeUnityTable Initializes unity roots lookup table used by Fast Fourier Transform functions (FFT, FFTDeinterleaved, and FFTInterleaved)
FFTInterleaved Fast Fourier Transform, plus deinterleaves multichannel audio before processing.
FFTPolar Converts complex components to polar form.
FFTUnswizzle Arranges Fast Fourier Transform function output by order of increasing frequency.
Interleave Interleaves audio samples.

Note that vmulComplex, ButterflyDIT4_1, and ButterflyDIT4_4 are internal implementation functions and not intended for direct use.

Note: There is a Windows Store app sample on MSDN Code Gallery that makes use of this header.

Update: This project is now available on GitHub under the MIT license. XDSP.h is also included in the Microsoft.XAudio2.Redist NuGet package, the Microsoft GDKX, and Xbox One XDK.