#ifndef LIPSYNC_SAMPLERATECONVERTER_H #define LIPSYNC_SAMPLERATECONVERTER_H #include #include #include "AudioStream.h" class SampleRateConverter : public AudioStream { public: SampleRateConverter(std::unique_ptr inputStream, int outputFrameRate); virtual int getFrameRate() override; virtual int getFrameCount() override; virtual int getChannelCount() override; virtual bool getNextSample(float &sample) override; private: // The stream we're reading from std::unique_ptr inputStream; // input frame rate / output frame rate double downscalingFactor; int outputFrameRate; int outputFrameCount; float lastInputSample; int lastInputSampleIndex; int nextOutputSampleIndex; float mean(double start, double end); float getInputSample(int sampleIndex); }; #endif //LIPSYNC_SAMPLERATECONVERTER_H