Files
TeaSpeak-Client/native/serverconnection/src/audio/AudioResampler.h
T
2019-06-26 22:09:01 +02:00

40 lines
1.1 KiB
C++

#pragma once
#include <memory>
#include <cmath>
#include <soxr.h>
#include <deque>
#include <mutex>
#if defined(WIN32) && !defined(ssize_t)
#define ssize_t int64_t
#endif
namespace tc {
namespace audio {
class AudioResampler {
public:
AudioResampler(size_t /* input rate */, size_t /* output rate */, size_t /* channels */);
virtual ~AudioResampler();
inline size_t channels() { return this->_channels; }
inline size_t input_rate() { return this->_input_rate; }
inline size_t output_rate() { return this->_output_rate; }
inline long double io_ratio() { return (long double) this->_output_rate / (long double) this->_input_rate; }
inline size_t estimated_output_size(size_t input_length) {
return (size_t) lroundl(this->io_ratio() * input_length) + 1;
}
inline bool valid() { return this->io_ratio() == 1 || this->soxr_handle != nullptr; }
ssize_t process(void* /* output */, const void* /* input */, size_t /* input length */);
private:
size_t const _channels = 0;
size_t const _input_rate = 0;
size_t const _output_rate = 0;
soxr_t soxr_handle = nullptr;
};
}
}