#pragma once #include #include #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 input, cpp::span output, bool end_of_data) -> std::pair; private: auto ApplyDither(cpp::span) -> void; uint32_t source_sample_rate_; uint32_t target_sample_rate_; uint32_t factor_; uint8_t num_channels_; std::vector channels_; }; } // namespace audio