diff options
author | Daniil Cherednik <dan.cherednik@gmail.com> | 2018-07-02 00:03:58 +0300 |
---|---|---|
committer | Daniil Cherednik <dan.cherednik@gmail.com> | 2018-07-02 00:03:58 +0300 |
commit | 005877ed1be0012444e6086d3d5d04d61c00a92f (patch) | |
tree | 7cd468e78a437a454bb94e2f3660cd35e952519f /src/atrac3denc.cpp | |
parent | 8ec37180923dd976bc60b379d2940988b94da2fc (diff) | |
download | atracdenc-005877ed1be0012444e6086d3d5d04d61c00a92f.tar.gz |
atrac3: Tonal component coding improvements:
- Move tonal coding in to bit allocation loop.
- Tonal extraction pessimization (should be rewritten with proper psy).
- Some tuning.
Results:
- Fixed high frequency cut while tonal component encoding enabled.
- Reduce spectr holes.
Diffstat (limited to 'src/atrac3denc.cpp')
-rw-r--r-- | src/atrac3denc.cpp | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/src/atrac3denc.cpp b/src/atrac3denc.cpp index 202e10e..0dc9e4f 100644 --- a/src/atrac3denc.cpp +++ b/src/atrac3denc.cpp @@ -133,10 +133,10 @@ TAtrac3MDCT::TGainModulatorArray TAtrac3MDCT::MakeGainModulatorArray(const TAtra TAtrac3Data::TTonalComponents TAtrac3Processor::ExtractTonalComponents(TFloat* specs, TTonalDetector fn) { TAtrac3Data::TTonalComponents res; - const float thresholds[TAtrac3Data::NumQMF] = { 0.9, 2.4, 2.8, 3.2 }; + const float thresholds[TAtrac3Data::NumQMF] = { 16, 2.4, 2.8, 3.2 }; for (uint8_t bandNum = 0; bandNum < this->NumQMF; ++bandNum) { //disable for frequence above 16KHz until we works without proper psy - if (bandNum > 2) + if (bandNum) continue; for (uint8_t blockNum = BlocksPerBand[bandNum]; blockNum < BlocksPerBand[bandNum + 1]; ++blockNum) { const uint16_t specNumStart = SpecsStartLong[blockNum]; @@ -146,13 +146,14 @@ TAtrac3Data::TTonalComponents TAtrac3Processor::ExtractTonalComponents(TFloat* s for (uint16_t n = specNumStart; n < specNumEnd; ++n) { //TODO: TFloat absValue = std::abs(specs[n]); + //std::cerr << n << " " << absValue << " " << level << std::endl; if (absValue > 65535.0) { TFloat shift = (specs[n] > 0) ? 65535.0 : -65535.0; std::cerr << "overflow: " << specs[n] << " at: " << n << std::endl; //res.push_back({n, specs[n] - shift}); specs[n] = shift; - } else if (log10(std::abs(specs[n])) - log10(level) > thresholds[bandNum]) { - res.push_back({n, specs[n]/* - level*/}); + } else if (std::abs(specs[n]) / level > thresholds[bandNum]) { + res.push_back({n, specs[n]/* - level*/, blockNum}); specs[n] = 0;//level; } @@ -178,7 +179,7 @@ void TAtrac3Processor::MapTonalComponents(const TTonalComponents& tonalComponent for (uint8_t j = 0; j < len; ++j) tmp[j] = tonalComponents[startPos + j].Val; const TScaledBlock& scaledBlock = Scaler.Scale(tmp, len); - componentMap->push_back({&tonalComponents[startPos], 7, scaledBlock}); + componentMap->push_back({&tonalComponents[startPos], scaledBlock}); } } @@ -377,12 +378,14 @@ TPCMEngine<TFloat>::TProcessLambda TAtrac3Processor::GetEncodeLambda() tonals[channel] = Params.NoTonalComponents ? TAtrac3Data::TTonalComponents() : ExtractTonalComponents(specs.data(), [](const TFloat* spec, uint16_t len) { std::vector<TFloat> magnitude(len); + //TFloat s = 0.0; for (uint16_t i = 0; i < len; ++i) { magnitude[i] = std::abs(spec[i]); + // s += magnitude[i]; } - float median = CalcMedian(magnitude.data(), len); + float median = CalcMedian(magnitude.data(), len); for (uint16_t i = 0; i < len; ++i) { - if (median > 0.001) { + if (median > 1.0) { return median; } } |