| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| #pragma once |
|
|
| #include <string> |
| #include <vector> |
| #include <map> |
| #include <memory> |
| #include <cstdint> |
|
|
| #include "EngineWrapper.hpp" |
|
|
| class ZipVoiceEngine { |
| public: |
| struct Config { |
| std::string model_dir; |
| int max_feat_len = 1024; |
| int max_tokens = 384; |
| int feat_dim = 100; |
| int sampling_rate = 24000; |
| int hop_length = 256; |
| int num_step = 10; |
| float t_shift = 0.5f; |
| float guidance_scale = 1.0f; |
| }; |
|
|
| struct ModelInfo { |
| std::string name; |
| std::string file; |
| std::vector<std::string> inputs; |
| std::vector<std::string> outputs; |
| }; |
|
|
| struct Timing { |
| float encoder_time_sec = 0.0f; |
| float duration_expand_time_sec = 0.0f; |
| float decoder_time_sec = 0.0f; |
| float total_time_sec = 0.0f; |
| int generated_frames = 0; |
| int features_len = 0; |
| }; |
|
|
| ZipVoiceEngine(); |
| ~ZipVoiceEngine(); |
|
|
| |
| |
| |
| |
| |
| int Init(const std::string& model_dir, const char* axclConfig = nullptr); |
|
|
| |
| |
| |
| |
| int RunEncoder(const std::vector<int32_t>& cat_tokens, std::vector<float>& out_encoded); |
|
|
| |
| |
| |
| int DurationExpand(const std::vector<float>& encoded, |
| int prompt_tokens_len, |
| int text_tokens_len, |
| int prompt_features_len, |
| float speed, |
| std::vector<float>& out_text_condition, |
| int& out_features_len); |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| int Sample(const std::vector<int32_t>& cat_tokens, |
| int prompt_tokens_len, |
| int text_tokens_len, |
| const std::vector<float>& prompt_features, |
| int prompt_features_len, |
| float speed, |
| float guidance_scale, |
| int seed, |
| std::vector<float>& out_features, |
| Timing& out_timing); |
|
|
| const Config& GetConfig() const { return m_config; } |
| bool HasInit() const { return m_has_init; } |
|
|
| private: |
| Config m_config; |
| bool m_has_init; |
|
|
| ModelInfo m_encoder_info; |
| std::vector<ModelInfo> m_decoder_parts; |
|
|
| |
| std::map<std::string, std::unique_ptr<EngineWrapper>> m_sessions; |
|
|
| |
| int m_decoder_seq_len; |
| bool m_decoder_has_padding_mask; |
|
|
| int LoadConfig(const std::string& model_dir); |
| int LoadManifest(const std::string& model_dir); |
| int LoadModels(const std::string& model_dir, const char* axclConfig = nullptr); |
| int LoadDecoderMetadata(); |
|
|
| std::vector<float> GetTimesteps(int num_step, float t_shift) const; |
|
|
| int RunDecoderPart(const ModelInfo& part, |
| std::map<std::string, std::vector<float>>& values, |
| const std::vector<uint8_t>* padding_mask_data = nullptr, |
| std::vector<uint8_t>* padding_mask2_out = nullptr); |
|
|
| static double GetCurrentTimeMs(); |
| }; |
|
|