1 #pragma once 2 3 #include "engine/bufferscalers/enginebufferscale.h" 4 #include "util/memory.h" 5 #include "util/samplebuffer.h" 6 7 class ReadAheadManager; 8 9 namespace soundtouch { 10 class SoundTouch; 11 } // namespace soundtouch 12 13 // Uses libsoundtouch to scale audio. 14 class EngineBufferScaleST : public EngineBufferScale { 15 Q_OBJECT 16 public: 17 explicit EngineBufferScaleST( 18 ReadAheadManager* pReadAheadManager); 19 ~EngineBufferScaleST() override; 20 21 void setScaleParameters(double base_rate, 22 double* pTempoRatio, 23 double* pPitchRatio) override; 24 25 // Scale buffer. 26 double scaleBuffer( 27 CSAMPLE* pOutputBuffer, 28 SINT iOutputBufferSize) override; 29 30 // Flush buffer. 31 void clear() override; 32 33 private: 34 void onSampleRateChanged() override; 35 36 // The read-ahead manager that we use to fetch samples 37 ReadAheadManager* m_pReadAheadManager; 38 39 // SoundTouch time/pitch scaling lib 40 std::unique_ptr<soundtouch::SoundTouch> m_pSoundTouch; 41 42 // Temporary buffer for reading from the RAMAN. 43 mixxx::SampleBuffer buffer_back; 44 45 // Holds the playback direction. 46 bool m_bBackwards; 47 }; 48