#pragma once #include "engine/framework/core/backend.h" #include #include #include #include namespace engine::assets { class TensorSource; } namespace engine::audio { struct FlashSrWeights; class FlashSrGraph; class FlashSrDsp; struct FlashSrOutput { int sample_rate = 48000; std::vector samples; }; class FlashSrModel { public: static FlashSrModel load_from_directory(const std::filesystem::path & model_dir); static FlashSrModel load_from_directory(const std::filesystem::path & model_dir, const core::BackendConfig & backend_config); static FlashSrModel load_from_tensor_source( std::shared_ptr source, const core::BackendConfig & backend_config); FlashSrModel(); ~FlashSrModel(); FlashSrModel(FlashSrModel &&) noexcept; FlashSrModel & operator=(FlashSrModel &&) noexcept; FlashSrModel(const FlashSrModel &) = delete; FlashSrModel & operator=(const FlashSrModel &) = delete; FlashSrOutput super_resolve_mono_16k(const std::vector & waveform) const; private: explicit FlashSrModel(std::shared_ptr weights); std::shared_ptr weights_; mutable std::unique_ptr graph_; mutable std::unique_ptr dsp_; }; } // namespace engine::audio