| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- #ifndef ALCOMPLEX_H
- #define ALCOMPLEX_H
- #include "AL/al.h"
- #ifdef __cplusplus
- extern "C" {
- #endif
- typedef struct ALcomplex {
- ALdouble Real;
- ALdouble Imag;
- } ALcomplex;
- /** Addition of two complex numbers. */
- inline ALcomplex complex_add(ALcomplex a, ALcomplex b)
- {
- ALcomplex result;
- result.Real = a.Real + b.Real;
- result.Imag = a.Imag + b.Imag;
- return result;
- }
- /** Subtraction of two complex numbers. */
- inline ALcomplex complex_sub(ALcomplex a, ALcomplex b)
- {
- ALcomplex result;
- result.Real = a.Real - b.Real;
- result.Imag = a.Imag - b.Imag;
- return result;
- }
- /** Multiplication of two complex numbers. */
- inline ALcomplex complex_mult(ALcomplex a, ALcomplex b)
- {
- ALcomplex result;
- result.Real = a.Real*b.Real - a.Imag*b.Imag;
- result.Imag = a.Imag*b.Real + a.Real*b.Imag;
- return result;
- }
- /**
- * Iterative implementation of 2-radix FFT (In-place algorithm). Sign = -1 is
- * FFT and 1 is iFFT (inverse). Fills FFTBuffer[0...FFTSize-1] with the
- * Discrete Fourier Transform (DFT) of the time domain data stored in
- * FFTBuffer[0...FFTSize-1]. FFTBuffer is an array of complex numbers, FFTSize
- * MUST BE power of two.
- */
- void complex_fft(ALcomplex *FFTBuffer, ALsizei FFTSize, ALdouble Sign);
- /**
- * Calculate the complex helical sequence (discrete-time analytical signal) of
- * the given input using the discrete Hilbert transform (In-place algorithm).
- * Fills Buffer[0...size-1] with the discrete-time analytical signal stored in
- * Buffer[0...size-1]. Buffer is an array of complex numbers, size MUST BE
- * power of two.
- */
- void complex_hilbert(ALcomplex *Buffer, ALsizei size);
- #ifdef __cplusplus
- } // extern "C"
- #endif
- #endif /* ALCOMPLEX_H */
|