123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- #ifndef RateTransposer_H
- #define RateTransposer_H
- #include <stddef.h>
- #include "AAFilter.h"
- #include "FIFOSamplePipe.h"
- #include "FIFOSampleBuffer.h"
- #include "STTypes.h"
- namespace soundtouch
- {
- class TransposerBase
- {
- public:
- enum ALGORITHM {
- LINEAR = 0,
- CUBIC,
- SHANNON
- };
- protected:
- virtual int transposeMono(SAMPLETYPE *dest,
- const SAMPLETYPE *src,
- int &srcSamples) = 0;
- virtual int transposeStereo(SAMPLETYPE *dest,
- const SAMPLETYPE *src,
- int &srcSamples) = 0;
- virtual int transposeMulti(SAMPLETYPE *dest,
- const SAMPLETYPE *src,
- int &srcSamples) = 0;
- static ALGORITHM algorithm;
- public:
- double rate;
- int numChannels;
- TransposerBase();
- virtual ~TransposerBase();
- virtual int transpose(FIFOSampleBuffer &dest, FIFOSampleBuffer &src);
- virtual void setRate(double newRate);
- virtual void setChannels(int channels);
- virtual int getLatency() const = 0;
- virtual void resetRegisters() = 0;
-
- static TransposerBase *newInstance();
-
- static void setAlgorithm(ALGORITHM a);
- };
- class RateTransposer : public FIFOProcessor
- {
- protected:
-
- AAFilter *pAAFilter;
- TransposerBase *pTransposer;
-
-
- FIFOSampleBuffer inputBuffer;
-
- FIFOSampleBuffer midBuffer;
-
- FIFOSampleBuffer outputBuffer;
- bool bUseAAFilter;
-
-
-
-
- void processSamples(const SAMPLETYPE *src,
- uint numSamples);
- public:
- RateTransposer();
- virtual ~RateTransposer() override;
-
- FIFOSamplePipe *getOutput() { return &outputBuffer; };
-
- AAFilter *getAAFilter();
-
- void enableAAFilter(bool newMode);
-
- bool isAAFilterEnabled() const;
-
-
- virtual void setRate(double newRate);
-
- void setChannels(int channels);
-
-
- void putSamples(const SAMPLETYPE *samples, uint numSamples) override;
-
- void clear() override;
-
- int isEmpty() const override;
-
- int getLatency() const;
- };
- }
- #endif
|