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/atrac3denc.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/atrac3denc.h')
-rw-r--r-- | src/atrac3denc.h | 46 |
1 files changed, 35 insertions, 11 deletions
diff --git a/src/atrac3denc.h b/src/atrac3denc.h index 149f1c6..5984728 100644 --- a/src/atrac3denc.h +++ b/src/atrac3denc.h @@ -1,10 +1,13 @@ #pragma once +#include "config.h" #include "pcmengin.h" #include "oma.h" #include "aea.h" #include "atrac/atrac3.h" #include "atrac/atrac3_qmf.h" +#include "transient_detector.h" +#include "atrac/atrac3_bitstream.h" #include "atrac/atrac_scale.h" #include "mdct/mdct.h" #include "gain_processor.h" @@ -13,33 +16,54 @@ #include <array> namespace NAtracDEnc { -class TAtrac3MDCT : public virtual TAtrac3Data { +class TAtrac3MDCT : public virtual NAtrac3::TAtrac3Data { NMDCT::TMDCT<512> Mdct512; NMDCT::TMIDCT<512> Midct512; public: typedef TGainProcessor<TAtrac3Data> TAtrac3GainProcessor; TAtrac3GainProcessor GainProcessor; + TAtrac3MDCT() + : Mdct512(2) + {} public: using TGainModulator = TAtrac3GainProcessor::TGainModulator; using TGainDemodulator = TAtrac3GainProcessor::TGainDemodulator; typedef std::array<TGainDemodulator, 4> TGainDemodulatorArray; typedef std::array<TGainModulator, 4> TGainModulatorArray; - void Mdct(double specs[1024], double* bands[4], TGainModulatorArray gainModulators = TGainModulatorArray()); - void Midct(double specs[1024], double* bands[4], TGainDemodulatorArray gainDemodulators = TGainDemodulatorArray()); + void Mdct(TFloat specs[1024], TFloat* bands[4], TGainModulatorArray gainModulators = TGainModulatorArray()); + void Midct(TFloat specs[1024], TFloat* bands[4], TGainDemodulatorArray gainDemodulators = TGainDemodulatorArray()); protected: TAtrac3MDCT::TGainModulatorArray MakeGainModulatorArray(const TAtrac3Data::SubbandInfo& si); }; -class TAtrac3Processor : public IProcessor<double>, public TAtrac3MDCT, public virtual TAtrac3Data { - TAeaPtr Oma; - const TContainerParams Params; - double PcmBuffer[2][4][256 + 256]; //2 channel, 4 band, 256 sample + 256 for overlap buffer - Atrac3SplitFilterBank<double> SplitFilterBank[2]; +//returns threshhold +typedef std::function<float(const TFloat* p, uint16_t len)> TTonalDetector; + +class TAtrac3Processor : public IProcessor<TFloat>, public TAtrac3MDCT, public virtual NAtrac3::TAtrac3Data { + TCompressedIOPtr Oma; + const NAtrac3::TAtrac3EncoderSettings Params; + TFloat PcmBuffer[2][4][256 + 256]; //2 channel, 4 band, 256 sample + 256 for overlap buffer + Atrac3SplitFilterBank<TFloat> SplitFilterBank[2]; TScaler<TAtrac3Data> Scaler; + std::vector<TTransientDetector> TransientDetectors; + typedef std::array<uint8_t, NumSpecs> TonalComponentMask; +#ifdef ATRAC_UT_PUBLIC +public: +#endif + uint32_t CheckLevelOverflow(const std::vector<TFloat>& gain, const TAtrac3Data::SubbandInfo::TGainPoint& point); + std::vector<SubbandInfo::TGainPoint> FilterCurve(const std::vector<TFloat>& gain, + const std::vector<SubbandInfo::TGainPoint>& curve, + const int threshold); + TFloat LimitRel(TFloat x); + TAtrac3Data::SubbandInfo CreateSubbandInfo(TFloat* in[4], uint32_t channel, TTransientDetector* transientDetector); + TonalComponentMask AnalyzeTonalComponent(TFloat* specs); + TTonalComponents ExtractTonalComponents(TFloat* specs, TTonalDetector fn); + + std::vector<NAtrac3::TTonalComponent> MapTonalComponents(const TTonalComponents& tonalComponents); public: - TAtrac3Processor(TAeaPtr&& oma, const TContainerParams& params); + TAtrac3Processor(TCompressedIOPtr&& oma, NAtrac3::TAtrac3EncoderSettings&& encoderSettings); ~TAtrac3Processor(); - TPCMEngine<double>::TProcessLambda GetDecodeLambda() override; - TPCMEngine<double>::TProcessLambda GetEncodeLambda() override; + TPCMEngine<TFloat>::TProcessLambda GetDecodeLambda() override; + TPCMEngine<TFloat>::TProcessLambda GetEncodeLambda() override; }; } |