#pragma once #include "engine/framework/assets/tensor_source.h" #include "engine/framework/core/backend.h" #include "engine/models/rvc/assets.h" #include #include #include namespace engine::models::rvc { struct RvcSynthesizerInput { std::vector features; std::vector pitch; std::vector pitchf; std::vector sine_source; int64_t frames = 0; int64_t feature_dim = 0; int speaker_id = 0; }; struct RvcSynthesizerOutput { std::vector audio; int sample_rate = 0; }; class RvcSynthesizer { public: RvcSynthesizer() = default; RvcSynthesizer( std::shared_ptr source, engine::core::BackendConfig backend, engine::assets::TensorStorageType storage_type, int sample_rate, RvcSynthesizerLayout layout, bool v1, bool has_f0); ~RvcSynthesizer(); RvcSynthesizer(RvcSynthesizer &&) noexcept; RvcSynthesizer & operator=(RvcSynthesizer &&) noexcept; RvcSynthesizer(const RvcSynthesizer &) = delete; RvcSynthesizer & operator=(const RvcSynthesizer &) = delete; RvcSynthesizerOutput infer(const RvcSynthesizerInput & input) const; private: struct State; std::shared_ptr state_; }; } // namespace engine::models::rvc