2016-01-06 20:02:06 +00:00
|
|
|
#pragma once
|
2015-09-17 19:47:58 +00:00
|
|
|
|
|
|
|
#include <memory>
|
|
|
|
#include "AudioStream.h"
|
|
|
|
|
|
|
|
class SampleRateConverter : public AudioStream {
|
|
|
|
public:
|
2016-03-15 18:56:02 +00:00
|
|
|
SampleRateConverter(std::unique_ptr<AudioStream> inputStream, int outputSampleRate);
|
2016-03-07 20:28:31 +00:00
|
|
|
SampleRateConverter(const SampleRateConverter& rhs, bool reset);
|
2016-04-19 19:12:44 +00:00
|
|
|
std::unique_ptr<AudioStream> clone(bool reset) const override;
|
|
|
|
int getSampleRate() const override;
|
|
|
|
int getSampleCount() const override;
|
|
|
|
int getSampleIndex() const override;
|
2016-03-07 20:28:31 +00:00
|
|
|
void seek(int sampleIndex) override;
|
|
|
|
float readSample() override;
|
2015-09-17 19:47:58 +00:00
|
|
|
private:
|
|
|
|
std::unique_ptr<AudioStream> inputStream;
|
2016-03-15 18:56:02 +00:00
|
|
|
double downscalingFactor; // input sample rate / output sample rate
|
2015-09-17 19:47:58 +00:00
|
|
|
|
2016-03-15 18:56:02 +00:00
|
|
|
int outputSampleRate;
|
|
|
|
int outputSampleCount;
|
2015-09-17 19:47:58 +00:00
|
|
|
|
|
|
|
float lastInputSample;
|
|
|
|
int lastInputSampleIndex;
|
|
|
|
|
|
|
|
int nextOutputSampleIndex;
|
|
|
|
|
|
|
|
float mean(double start, double end);
|
|
|
|
float getInputSample(int sampleIndex);
|
|
|
|
};
|
2016-03-15 18:56:02 +00:00
|
|
|
|
|
|
|
std::unique_ptr<AudioStream> convertSampleRate(std::unique_ptr<AudioStream> audioStream, int sampleRate);
|