summaryrefslogtreecommitdiff
path: root/src/audio/include
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-08-10 19:12:38 +1000
committerjacqueline <me@jacqueline.id.au>2023-08-10 19:12:38 +1000
commit958160aa545e3d91b2a4f1a367817e73d298e8a9 (patch)
tree190e6591a6dda1f0d9651c7e127666ead2a3373b /src/audio/include
parentd8fc77101dcf80a3643a00b3446dca1e390ce997 (diff)
downloadtangara-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.hpp21
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