#pragma once #include "engine/framework/audio/istft_graph.h" #include "engine/framework/core/execution_context.h" #include "engine/framework/modules/speech_encoders/wavlm_encoder.h" #include "engine/framework/runtime/session.h" #include "engine/models/miocodec/assets.h" #include "engine/models/miocodec/components.h" #include #include #include #include namespace engine::models::miocodec { struct MioCodecSslFeatures { std::vector values; int64_t frames = 0; }; std::vector prepare_miocodec_mono_audio( const runtime::AudioBuffer & audio, int target_sample_rate); class MioCodecSslFeatureExtractor { public: MioCodecSslFeatureExtractor( std::shared_ptr assets, engine::modules::WavlmEncoderComponent wavlm, std::vector layer_indices, bool normalize_features, std::string timing_prefix); MioCodecSslFeatures extract(const std::vector & mono_44k) const; const engine::modules::WavlmEncoderComponent & wavlm() const noexcept; private: std::shared_ptr assets_; engine::modules::WavlmEncoderComponent wavlm_; std::vector layer_indices_; bool normalize_features_ = false; std::string timing_prefix_; }; class MioCodecGlobalReferenceEncoder { public: MioCodecGlobalReferenceEncoder( MioCodecSslFeatureExtractor ssl_extractor, MioCodecGlobalEncoderRuntime & global_encoder); MioCodecGlobalEmbedding embedding_for_reference(const std::vector & reference_audio) const; private: struct CachedReference { std::vector audio; MioCodecGlobalEmbedding embedding; }; MioCodecSslFeatureExtractor ssl_extractor_; MioCodecGlobalEncoderRuntime * global_encoder_ = nullptr; mutable std::vector cached_references_; }; class MioCodecWaveformReconstructor { public: MioCodecWaveformReconstructor( std::shared_ptr assets, core::ExecutionContext & execution_context); std::vector reconstruct( const MioCodecWaveHead & head, const std::vector & window); private: std::shared_ptr assets_; core::ExecutionContext * execution_context_ = nullptr; std::unique_ptr host_istft_; int64_t host_istft_frames_ = 0; std::unique_ptr cuda_istft_; int64_t cuda_istft_frames_ = 0; }; } // namespace engine::models::miocodec