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.

This release of XDSP.H is bound to the Microsoft Public License (Ms-PL).

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

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.

Release History 

May 25, 2012 - fixed some /analyze issues and a memcpy_s bug in IFFTDinterleaved

June 26, 2013 - Updated with optional support for DirectXMath 3.05 and the new VS 2013 __vectorcall calling convention

 

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