// Copyright 2016 Citra Emulator Project // Licensed under GPLv2 or any later version // Refer to the license.txt file included. #pragma once #include #include #include #include "common/common_types.h" namespace soundtouch { class SoundTouch; } namespace AudioCore { class TimeStretcher { public: TimeStretcher(); ~TimeStretcher(); void SetOutputSampleRate(unsigned int sample_rate); /// @param in Input sample buffer /// @param num_in Number of input frames in `in` /// @param out Output sample buffer /// @param num_out Desired number of output frames in `out` /// @returns Actual number of frames written to `out` std::size_t Process(const s16* in, std::size_t num_in, s16* out, std::size_t num_out); void Clear(); void Flush(); private: unsigned int sample_rate; std::unique_ptr sound_touch; double stretch_ratio = 1.0; }; } // namespace AudioCore