#pragma once #include "engine/bufferscalers/enginebufferscale.h" #include "util/memory.h" #include "util/samplebuffer.h" class ReadAheadManager; namespace soundtouch { class SoundTouch; } // namespace soundtouch // Uses libsoundtouch to scale audio. class EngineBufferScaleST : public EngineBufferScale { Q_OBJECT public: explicit EngineBufferScaleST( ReadAheadManager* pReadAheadManager); ~EngineBufferScaleST() override; void setScaleParameters(double base_rate, double* pTempoRatio, double* pPitchRatio) override; // Scale buffer. double scaleBuffer( CSAMPLE* pOutputBuffer, SINT iOutputBufferSize) override; // Flush buffer. void clear() override; private: void onSampleRateChanged() override; // The read-ahead manager that we use to fetch samples ReadAheadManager* m_pReadAheadManager; // SoundTouch time/pitch scaling lib std::unique_ptr m_pSoundTouch; // Temporary buffer for reading from the RAMAN. mixxx::SampleBuffer buffer_back; // Holds the playback direction. bool m_bBackwards; };