aboutsummaryrefslogtreecommitdiffstats
path: root/src/atrac3denc.cpp
diff options
context:
space:
mode:
authorDaniil Cherednik <dan.cherednik@gmail.com>2018-07-02 00:03:58 +0300
committerDaniil Cherednik <dan.cherednik@gmail.com>2018-07-02 00:03:58 +0300
commit005877ed1be0012444e6086d3d5d04d61c00a92f (patch)
tree7cd468e78a437a454bb94e2f3660cd35e952519f /src/atrac3denc.cpp
parent8ec37180923dd976bc60b379d2940988b94da2fc (diff)
downloadatracdenc-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.cpp17
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;
}
}