summaryrefslogtreecommitdiff
path: root/src/audio/include/resample.hpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-08-04 20:07:44 +1000
committerjacqueline <me@jacqueline.id.au>2023-08-04 20:07:44 +1000
commit60f767713227b5405b855e6e6e2a0475ecd96bcc (patch)
treefe55b7048e9e7f1f587f465a1845aef9d3b7b731 /src/audio/include/resample.hpp
parent3b240d1cd5c52caf189ca036a1a841f7e6d84ccd (diff)
downloadtangara-fw-60f767713227b5405b855e6e6e2a0475ecd96bcc.tar.gz
Do our own resampling
Diffstat (limited to 'src/audio/include/resample.hpp')
-rw-r--r--src/audio/include/resample.hpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/audio/include/resample.hpp b/src/audio/include/resample.hpp
new file mode 100644
index 00000000..d7933470
--- /dev/null
+++ b/src/audio/include/resample.hpp
@@ -0,0 +1,41 @@
+#pragma once
+
+#include <sys/_stdint.h>
+#include <vector>
+
+#include "span.hpp"
+
+#include "sample.hpp"
+
+namespace audio {
+
+class Channel;
+
+class Resampler {
+ public:
+ Resampler(uint32_t source_sample_rate,
+ uint32_t target_sample_rate,
+ uint8_t num_channels);
+
+ ~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,
+ cpp::span<sample::Sample> output,
+ bool end_of_data) -> std::pair<size_t,size_t>;
+
+ private:
+ auto ApplyDither(cpp::span<sample::Sample>) -> void;
+
+ uint32_t source_sample_rate_;
+ uint32_t target_sample_rate_;
+ uint32_t factor_;
+
+ uint8_t num_channels_;
+ std::vector<Channel> channels_;
+};
+
+} // namespace audio \ No newline at end of file