XDSP.H - Digital Signal Processing helper functions
audio, directxmathOriginally 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.