diff options
| author | jacqueline <me@jacqueline.id.au> | 2023-08-10 19:12:38 +1000 |
|---|---|---|
| committer | jacqueline <me@jacqueline.id.au> | 2023-08-10 19:12:38 +1000 |
| commit | 958160aa545e3d91b2a4f1a367817e73d298e8a9 (patch) | |
| tree | 190e6591a6dda1f0d9651c7e127666ead2a3373b /src/audio/include | |
| parent | d8fc77101dcf80a3643a00b3446dca1e390ce997 (diff) | |
| download | tangara-fw-958160aa545e3d91b2a4f1a367817e73d298e8a9.tar.gz | |
Use the libspeexdsp resampler
AFAICT it runs a little slower? but it's fixed point, and has much
better understood audio characteristics.
Diffstat (limited to 'src/audio/include')
| -rw-r--r-- | src/audio/include/resample.hpp | 21 |
1 files changed, 4 insertions, 17 deletions
diff --git a/src/audio/include/resample.hpp b/src/audio/include/resample.hpp index 3855415a..7b114f59 100644 --- a/src/audio/include/resample.hpp +++ b/src/audio/include/resample.hpp @@ -4,6 +4,7 @@ #include <vector> #include "span.hpp" +#include "speex/speex_resampler.h" #include "sample.hpp" @@ -17,28 +18,14 @@ class Resampler { ~Resampler(); - auto source_sample_rate() -> uint32_t { return source_sample_rate_; } - auto target_sample_rate() -> uint32_t { return target_sample_rate_; } - auto channels() -> uint_fast8_t { return num_channels_; } - - auto Process(cpp::span<const sample::Sample> input, + auto Process(cpp::span<sample::Sample> input, cpp::span<sample::Sample> output, bool end_of_data) -> std::pair<size_t, size_t>; private: - auto Subsample(int channel) -> float; - auto ApplyFilter(cpp::span<float> filter, cpp::span<float> input) -> float; - - uint32_t source_sample_rate_; - uint32_t target_sample_rate_; - float factor_; + int err_; + SpeexResamplerState* resampler_; uint8_t num_channels_; - - std::vector<float*> channel_buffers_; - size_t channel_buffer_size_; - - float output_offset_; - int32_t input_index_; }; } // namespace audio
\ No newline at end of file |
