diff options
author | Daniil Cherednik <dan.cherednik@gmail.com> | 2016-06-19 02:58:23 +0300 |
---|---|---|
committer | Daniil Cherednik <dan.cherednik@gmail.com> | 2016-07-17 20:40:57 +0300 |
commit | 3999450de0b6098d3d41549a58c3ff23cc0a565d (patch) | |
tree | 98ff0660f98dae0510fb65ddf3dca3b6b543c927 /src/qmf/qmf.h | |
parent | c60933cd2be9f74453fd5db54ac090183b7bff83 (diff) | |
download | atracdenc-3999450de0b6098d3d41549a58c3ff23cc0a565d.tar.gz |
some improvements of ATRAC3 implementation:
- simple (ATRAC1 like) psychoacoustic added
- possibility to encode tonal components
- simple tonal component extractor
- refactoring
Diffstat (limited to 'src/qmf/qmf.h')
-rw-r--r-- | src/qmf/qmf.h | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/src/qmf/qmf.h b/src/qmf/qmf.h index 19c7d0a..e6ae58f 100644 --- a/src/qmf/qmf.h +++ b/src/qmf/qmf.h @@ -1,13 +1,15 @@ #pragma once #include <string.h> +#include "../config.h" + template<class TPCM, int nIn> class TQmf { static const float TapHalf[24]; - double QmfWindow[48]; + TFloat QmfWindow[48]; TPCM PcmBuffer[nIn + 46]; - double PcmBufferMerge[nIn + 46]; - double DelayBuff[46]; + TFloat PcmBufferMerge[nIn + 46]; + TFloat DelayBuff[46]; public: TQmf() { const int sz = sizeof(QmfWindow)/sizeof(QmfWindow[0]); @@ -21,8 +23,8 @@ public: } } - void Split(TPCM* in, double* lower, double* upper) { - double temp; + void Split(TPCM* in, TFloat* lower, TFloat* upper) { + TFloat temp; for (size_t i = 0; i < 46; i++) PcmBuffer[i] = PcmBuffer[nIn + i]; @@ -41,9 +43,9 @@ public: } } - void Merge(TPCM* out, double* lower, double* upper) { - memcpy(&PcmBufferMerge[0], &DelayBuff[0], 46*sizeof(double)); - double* newPart = &PcmBufferMerge[46]; + void Merge(TPCM* out, TFloat* lower, TFloat* upper) { + memcpy(&PcmBufferMerge[0], &DelayBuff[0], 46*sizeof(TFloat)); + TFloat* newPart = &PcmBufferMerge[46]; for (int i = 0; i < nIn; i+=4) { newPart[i+0] = lower[i/2] + upper[i/2]; newPart[i+1] = lower[i/2] - upper[i/2]; @@ -51,10 +53,10 @@ public: newPart[i+3] = lower[i/2 + 1] - upper[i/2 + 1]; } - double* winP = &PcmBufferMerge[0]; + TFloat* winP = &PcmBufferMerge[0]; for (size_t j = nIn/2; j != 0; j--) { - double s1 = 0; - double s2 = 0; + TFloat s1 = 0; + TFloat s2 = 0; for (size_t i = 0; i < 48; i+=2) { s1 += winP[i] * QmfWindow[i]; s2 += winP[i+1] * QmfWindow[i+1]; @@ -64,7 +66,7 @@ public: winP += 2; out += 2; } - memcpy(&DelayBuff[0], &PcmBufferMerge[nIn], 46*sizeof(double)); + memcpy(&DelayBuff[0], &PcmBufferMerge[nIn], 46*sizeof(TFloat)); } }; |