rhubarb-lip-sync/src/audioInput/SampleRateConverter.h

35 lines
857 B
C
Raw Normal View History

#ifndef LIPSYNC_SAMPLERATECONVERTER_H
#define LIPSYNC_SAMPLERATECONVERTER_H
#include <memory>
#include <vector>
#include "AudioStream.h"
class SampleRateConverter : public AudioStream {
public:
SampleRateConverter(std::unique_ptr<AudioStream> 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<AudioStream> 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