diff options
Diffstat (limited to 'Src/external_dependencies/openmpt-trunk/sounddsp/DSP.h')
-rw-r--r-- | Src/external_dependencies/openmpt-trunk/sounddsp/DSP.h | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/Src/external_dependencies/openmpt-trunk/sounddsp/DSP.h b/Src/external_dependencies/openmpt-trunk/sounddsp/DSP.h new file mode 100644 index 00000000..90eb9849 --- /dev/null +++ b/Src/external_dependencies/openmpt-trunk/sounddsp/DSP.h @@ -0,0 +1,142 @@ +/* + * DSP.h + * ----- + * Purpose: Mixing code for various DSPs (EQ, Mega-Bass, ...) + * Notes : Ugh... This should really be removed at some point. + * Authors: Olivier Lapicque + * OpenMPT Devs + * The OpenMPT source code is released under the BSD license. Read LICENSE for more details. + */ + + +#pragma once + +#include "openmpt/all/BuildSettings.hpp" + + +OPENMPT_NAMESPACE_BEGIN + + +#ifndef NO_DSP + +// Buffer Sizes +#define SURROUNDBUFFERSIZE 2048 // 50ms @ 48kHz + + +class CSurroundSettings +{ +public: + uint32 m_nProLogicDepth; + uint32 m_nProLogicDelay; +public: + CSurroundSettings(); +}; + + +class CMegaBassSettings +{ +public: + uint32 m_nXBassDepth; + uint32 m_nXBassRange; +public: + CMegaBassSettings(); +}; + + +struct BitCrushSettings +{ + int m_Bits; + BitCrushSettings(); +}; + + +class CSurround +{ +public: + CSurroundSettings m_Settings; + + // Surround Encoding: 1 delay line + low-pass filter + high-pass filter + int32 nSurroundSize; + int32 nSurroundPos; + int32 nDolbyDepth; + + // Surround Biquads + int32 nDolbyHP_Y1; + int32 nDolbyHP_X1; + int32 nDolbyLP_Y1; + int32 nDolbyHP_B0; + int32 nDolbyHP_B1; + int32 nDolbyHP_A1; + int32 nDolbyLP_B0; + int32 nDolbyLP_B1; + int32 nDolbyLP_A1; + + int32 SurroundBuffer[SURROUNDBUFFERSIZE]; + +public: + CSurround(); +public: + void SetSettings(const CSurroundSettings &settings) { m_Settings = settings; } + // [XBass level 0(quiet)-100(loud)], [cutoff in Hz 10-100] + bool SetXBassParameters(uint32 nDepth, uint32 nRange); + // [Surround level 0(quiet)-100(heavy)] [delay in ms, usually 5-40ms] + void SetSurroundParameters(uint32 nDepth, uint32 nDelay); + void Initialize(bool bReset, DWORD MixingFreq); + void Process(int * MixSoundBuffer, int * MixRearBuffer, int count, uint32 nChannels); +private: + void ProcessStereoSurround(int * MixSoundBuffer, int count); + void ProcessQuadSurround(int * MixSoundBuffer, int * MixRearBuffer, int count); +}; + + + +class CMegaBass +{ +public: + CMegaBassSettings m_Settings; + + // Bass Expansion: low-pass filter + int32 nXBassFlt_Y1; + int32 nXBassFlt_X1; + int32 nXBassFlt_B0; + int32 nXBassFlt_B1; + int32 nXBassFlt_A1; + + // DC Removal Biquad + int32 nDCRFlt_Y1lf; + int32 nDCRFlt_X1lf; + int32 nDCRFlt_Y1rf; + int32 nDCRFlt_X1rf; + int32 nDCRFlt_Y1lb; + int32 nDCRFlt_X1lb; + int32 nDCRFlt_Y1rb; + int32 nDCRFlt_X1rb; + +public: + CMegaBass(); +public: + void SetSettings(const CMegaBassSettings &settings) { m_Settings = settings; } + // [XBass level 0(quiet)-100(loud)], [cutoff in Hz 10-100] + void SetXBassParameters(uint32 nDepth, uint32 nRange); + void Initialize(bool bReset, DWORD MixingFreq); + void Process(int * MixSoundBuffer, int * MixRearBuffer, int count, uint32 nChannels); +}; + + +class BitCrush +{ +public: + BitCrushSettings m_Settings; +public: + BitCrush(); +public: + void SetSettings(const BitCrushSettings &settings) { m_Settings = settings; } + void Initialize(bool bReset, DWORD MixingFreq); + void Process(int * MixSoundBuffer, int * MixRearBuffer, int count, uint32 nChannels); +}; + + +#endif // NO_DSP + + +OPENMPT_NAMESPACE_END |