diff options
author | Daniil Cherednik <dan.cherednik@gmail.com> | 2016-06-19 02:58:23 +0300 |
---|---|---|
committer | Daniil Cherednik <dan.cherednik@gmail.com> | 2016-06-19 03:31:55 +0300 |
commit | 1151d5831f19a9f24dd0c545a4968606712a62d2 (patch) | |
tree | c978c1b9a3fc86fef531dd412fe6b7668b7c0567 /src/atrac/atrac1_qmf.h | |
parent | 8d65a0bd0774e03b3d10354e15f2f3361a2ce26a (diff) | |
download | atracdenc-1151d5831f19a9f24dd0c545a4968606712a62d2.tar.gz |
some improvements of ATRAC3 implementation:atrac3
- simple (ATRAC1 like) psychoacoustic added
- possibility to encode tonal components
- simple tonal component extractor
- refactoring
Diffstat (limited to 'src/atrac/atrac1_qmf.h')
-rw-r--r-- | src/atrac/atrac1_qmf.h | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/src/atrac/atrac1_qmf.h b/src/atrac/atrac1_qmf.h index 8550932..37d0bba 100644 --- a/src/atrac/atrac1_qmf.h +++ b/src/atrac/atrac1_qmf.h @@ -2,24 +2,26 @@ #include "../qmf/qmf.h" +namespace NAtracDEnc { + template<class TIn> class Atrac1SplitFilterBank { const static int nInSamples = 512; const static int delayComp = 39; TQmf<TIn, nInSamples> Qmf1; TQmf<TIn, nInSamples / 2> Qmf2; - std::vector<double> MidLowTmp; - std::vector<double> DelayBuf; + std::vector<TFloat> MidLowTmp; + std::vector<TFloat> DelayBuf; public: Atrac1SplitFilterBank() { MidLowTmp.resize(512); DelayBuf.resize(delayComp + 512); } - void Split(TIn* pcm, double* low, double* mid, double* hi) { - memcpy(&DelayBuf[0], &DelayBuf[256], sizeof(double) * delayComp); + void Split(TIn* pcm, TFloat* low, TFloat* mid, TFloat* hi) { + memcpy(&DelayBuf[0], &DelayBuf[256], sizeof(TFloat) * delayComp); Qmf1.Split(pcm, &MidLowTmp[0], &DelayBuf[delayComp]); Qmf2.Split(&MidLowTmp[0], low, mid); - memcpy(hi, &DelayBuf[0], sizeof(double) * 256); + memcpy(hi, &DelayBuf[0], sizeof(TFloat) * 256); } }; @@ -29,19 +31,19 @@ class Atrac1SynthesisFilterBank { const static int delayComp = 39; TQmf<TOut, nInSamples> Qmf1; TQmf<TOut, nInSamples / 2> Qmf2; - std::vector<double> MidLowTmp; - std::vector<double> DelayBuf; + std::vector<TFloat> MidLowTmp; + std::vector<TFloat> DelayBuf; public: Atrac1SynthesisFilterBank() { MidLowTmp.resize(512); DelayBuf.resize(delayComp + 512); } - void Synthesis(TOut* pcm, double* low, double* mid, double* hi) { - memcpy(&DelayBuf[0], &DelayBuf[256], sizeof(double) * delayComp); - memcpy(&DelayBuf[delayComp], hi, sizeof(double) * 256); + void Synthesis(TOut* pcm, TFloat* low, TFloat* mid, TFloat* hi) { + memcpy(&DelayBuf[0], &DelayBuf[256], sizeof(TFloat) * delayComp); + memcpy(&DelayBuf[delayComp], hi, sizeof(TFloat) * 256); Qmf2.Merge(&MidLowTmp[0], &low[0], &mid[0]); Qmf1.Merge(&pcm[0], &MidLowTmp[0], &DelayBuf[0]); } }; - +} //namespace NAtracDEnc |