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/mdct/mdct_ut.cpp | |
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/mdct/mdct_ut.cpp')
-rw-r--r-- | src/mdct/mdct_ut.cpp | 64 |
1 files changed, 32 insertions, 32 deletions
diff --git a/src/mdct/mdct_ut.cpp b/src/mdct/mdct_ut.cpp index e81bea1..3552afd 100644 --- a/src/mdct/mdct_ut.cpp +++ b/src/mdct/mdct_ut.cpp @@ -7,24 +7,24 @@ using std::vector; using namespace NMDCT; -static vector<double> mdct(double* x, int N) { - vector<double> res; +static vector<TFloat> mdct(TFloat* x, int N) { + vector<TFloat> res; for (int k = 0; k < N; k++) { - double sum = 0; + TFloat sum = 0; for (int n = 0; n < 2 * N; n++) - sum += x[n]* cos((M_PI/N) * ((double)n + 0.5 + N/2) * ((double)k + 0.5)); + sum += x[n]* cos((M_PI/N) * ((TFloat)n + 0.5 + N/2) * ((TFloat)k + 0.5)); res.push_back(sum); } return res; } -static vector<double> midct(double* x, int N) { - vector<double> res; +static vector<TFloat> midct(TFloat* x, int N) { + vector<TFloat> res; for (int n = 0; n < 2 * N; n++) { - double sum = 0; + TFloat sum = 0; for (int k = 0; k < N; k++) - sum += (x[k] * cos((M_PI/N) * ((double)n + 0.5 + N/2) * ((double)k + 0.5))); + sum += (x[k] * cos((M_PI/N) * ((TFloat)n + 0.5 + N/2) * ((TFloat)k + 0.5))); res.push_back(sum); } @@ -35,12 +35,12 @@ static vector<double> midct(double* x, int N) { TEST(TBitStream, MDCT64) { const int N = 64; TMDCT<N> transform(N); - vector<double> src(N); + vector<TFloat> src(N); for (int i = 0; i < N; i++) { src[i] = i; } - const vector<double> res1 = mdct(&src[0], N/2); - const vector<double> res2 = transform(&src[0]); + const vector<TFloat> res1 = mdct(&src[0], N/2); + const vector<TFloat> res2 = transform(&src[0]); EXPECT_EQ(res1.size(), res2.size()); for (int i = 0; i < res1.size(); i++) { EXPECT_NEAR(res1[i], res2[i], 0.0000000001); @@ -50,12 +50,12 @@ TEST(TBitStream, MDCT64) { TEST(TBitStream, MDCT128) { const int N = 128; TMDCT<N> transform(N); - vector<double> src(N); + vector<TFloat> src(N); for (int i = 0; i < N; i++) { src[i] = i; } - const vector<double> res1 = mdct(&src[0], N/2); - const vector<double> res2 = transform(&src[0]); + const vector<TFloat> res1 = mdct(&src[0], N/2); + const vector<TFloat> res2 = transform(&src[0]); EXPECT_EQ(res1.size(), res2.size()); for (int i = 0; i < res1.size(); i++) { EXPECT_NEAR(res1[i], res2[i], 0.0000000001); @@ -65,12 +65,12 @@ TEST(TBitStream, MDCT128) { TEST(TBitStream, MDCT256) { const int N = 256; TMDCT<N> transform(N); - vector<double> src(N); + vector<TFloat> src(N); for (int i = 0; i < N; i++) { src[i] = i; } - const vector<double> res1 = mdct(&src[0], N/2); - const vector<double> res2 = transform(&src[0]); + const vector<TFloat> res1 = mdct(&src[0], N/2); + const vector<TFloat> res2 = transform(&src[0]); EXPECT_EQ(res1.size(), res2.size()); for (int i = 0; i < res1.size(); i++) { EXPECT_NEAR(res1[i], res2[i], 0.00000001); @@ -80,12 +80,12 @@ TEST(TBitStream, MDCT256) { TEST(TBitStream, MDCT256_RAND) { const int N = 256; TMDCT<N> transform(N); - vector<double> src(N); + vector<TFloat> src(N); for (int i = 0; i < N; i++) { src[i] = rand(); } - const vector<double> res1 = mdct(&src[0], N/2); - const vector<double> res2 = transform(&src[0]); + const vector<TFloat> res1 = mdct(&src[0], N/2); + const vector<TFloat> res2 = transform(&src[0]); EXPECT_EQ(res1.size(), res2.size()); for (int i = 0; i < res1.size(); i++) { EXPECT_NEAR(res1[i], res2[i], 0.01); @@ -96,12 +96,12 @@ TEST(TBitStream, MDCT256_RAND) { TEST(TBitStream, MIDCT64) { const int N = 64; TMIDCT<N> transform(1); - vector<double> src(N); + vector<TFloat> src(N); for (int i = 0; i < N/2; i++) { src[i] = i; } - const vector<double> res1 = midct(&src[0], N/2); - const vector<double> res2 = transform(&src[0]); + const vector<TFloat> res1 = midct(&src[0], N/2); + const vector<TFloat> res2 = transform(&src[0]); EXPECT_EQ(res1.size(), res2.size()); for (int i = 0; i < N; i++) { EXPECT_NEAR(res1[i], res2[i], 0.0000000001); @@ -111,12 +111,12 @@ TEST(TBitStream, MIDCT64) { TEST(TBitStream, MIDCT128) { const int N = 128; TMIDCT<N> transform(1); - vector<double> src(N); + vector<TFloat> src(N); for (int i = 0; i < N/2; i++) { src[i] = i; } - const vector<double> res1 = midct(&src[0], N/2); - const vector<double> res2 = transform(&src[0]); + const vector<TFloat> res1 = midct(&src[0], N/2); + const vector<TFloat> res2 = transform(&src[0]); EXPECT_EQ(res1.size(), res2.size()); for (int i = 0; i < N; i++) { EXPECT_NEAR(res1[i], res2[i], 0.0000000001); @@ -126,12 +126,12 @@ TEST(TBitStream, MIDCT128) { TEST(TBitStream, MIDCT256) { const int N = 256; TMIDCT<N> transform(1); - vector<double> src(N); + vector<TFloat> src(N); for (int i = 0; i < N/2; i++) { src[i] = i; } - const vector<double> res1 = midct(&src[0], N/2); - const vector<double> res2 = transform(&src[0]); + const vector<TFloat> res1 = midct(&src[0], N/2); + const vector<TFloat> res2 = transform(&src[0]); EXPECT_EQ(res1.size(), res2.size()); for (int i = 0; i < N; i++) { EXPECT_NEAR(res1[i], res2[i], 0.000000001); @@ -141,12 +141,12 @@ TEST(TBitStream, MIDCT256) { TEST(TBitStream, MIDCT256_RAND) { const int N = 256; TMIDCT<N> transform(1); - vector<double> src(N); + vector<TFloat> src(N); for (int i = 0; i < N/2; i++) { src[i] = rand(); } - const vector<double> res1 = midct(&src[0], N/2); - const vector<double> res2 = transform(&src[0]); + const vector<TFloat> res1 = midct(&src[0], N/2); + const vector<TFloat> res2 = transform(&src[0]); EXPECT_EQ(res1.size(), res2.size()); for (int i = 0; i < N; i++) { EXPECT_NEAR(res1[i], res2[i], 0.01); |