40 lines
1.1 KiB
C++
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;
|
|
};
|
|
}
|
|
} |