12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- #pragma once
- #include "openmpt/all/BuildSettings.hpp"
- #include "Mixer.h"
- OPENMPT_NAMESPACE_BEGIN
- #ifdef MPT_INTMIXER
- inline constexpr int WFIR_QUANTBITS = 15;
- inline constexpr double WFIR_QUANTSCALE = 1 << WFIR_QUANTBITS;
- inline constexpr int WFIR_8SHIFT = (WFIR_QUANTBITS - 8);
- inline constexpr int WFIR_16BITSHIFT = (WFIR_QUANTBITS);
- using WFIR_TYPE = int16;
- #else
- using WFIR_TYPE = mixsample_t;
- #endif
- inline constexpr int WFIR_FRACBITS = 12;
- inline constexpr int WFIR_LUTLEN = ((1 << (WFIR_FRACBITS + 1)) + 1);
- inline constexpr int WFIR_LOG2WIDTH = 3;
- inline constexpr int WFIR_WIDTH = (1 << WFIR_LOG2WIDTH);
- enum WFIRType
- {
- WFIR_HANN = 0,
- WFIR_HAMMING = 1,
- WFIR_BLACKMANEXACT = 2,
- WFIR_BLACKMAN3T61 = 3,
- WFIR_BLACKMAN3T67 = 4,
- WFIR_BLACKMAN4T92 = 5,
- WFIR_BLACKMAN4T74 = 6,
- WFIR_KAISER4T = 7,
- };
- inline constexpr int WFIR_FRACSHIFT = (16 - (WFIR_FRACBITS + 1 + WFIR_LOG2WIDTH));
- inline constexpr int WFIR_FRACMASK = ((((1 << (17 - WFIR_FRACSHIFT)) - 1) & ~(WFIR_WIDTH - 1)));
- inline constexpr int WFIR_FRACHALVE = (1 << (16 - (WFIR_FRACBITS + 2)));
- class CWindowedFIR
- {
- private:
- double coef(int,double,double,int,int);
- public:
- void InitTable(double WFIRCutoff, uint8 WFIRType);
- WFIR_TYPE lut[WFIR_LUTLEN * WFIR_WIDTH];
- };
- OPENMPT_NAMESPACE_END
|