voice_audio_multi/include/engine/models/seed_vc/assets.h
Fabio c36510c21e
Some checks failed
Linux Build / Linux cpu (push) Has been cancelled
Linux Build / Linux cpu-clang (push) Has been cancelled
Linux Build / Linux vulkan (push) Has been cancelled
mac-build / macOS CPU (push) Has been cancelled
Nix Build / Nix (cpu) (push) Has been cancelled
Nix Build / Nix (vulkan) (push) Has been cancelled
windows-build / Windows CPU (push) Has been cancelled
Initial import: audio.cpp with Orange Pi documentation
2026-11-04 19:05:22 +01:00

190 lines
5.9 KiB
C++

#pragma once
#include "engine/framework/assets/resource_bundle.h"
#include "engine/framework/assets/tensor_source.h"
#include <filesystem>
#include <memory>
#include <string>
#include <string_view>
#include <vector>
namespace engine::models::seed_vc {
struct SeedVcMelConfig {
int64_t sample_rate = 0;
int64_t n_fft = 0;
int64_t win_size = 0;
int64_t hop_size = 0;
int64_t num_mels = 0;
float fmin = 0.0F;
float fmax = 0.0F;
};
struct SeedVcV2DitConfig {
int64_t block_size = 0;
int64_t depth = 0;
int64_t num_heads = 0;
int64_t hidden_dim = 0;
int64_t in_channels = 0;
int64_t content_dim = 0;
int64_t style_encoder_dim = 0;
bool time_as_token = false;
bool style_as_token = false;
bool uvit_skip_connection = false;
};
struct SeedVcLengthRegulatorConfig {
int64_t channels = 0;
int64_t codebook_size = 0;
bool is_discrete = false;
bool f0_condition = false;
std::vector<int64_t> sampling_ratios;
};
struct SeedVcV2ArConfig {
int64_t dim = 0;
int64_t head_dim = 0;
int64_t n_local_heads = 0;
int64_t intermediate_size = 0;
int64_t n_head = 0;
int64_t n_layer = 0;
int64_t vocab_size = 0;
float rope_base = 10000.0F;
};
struct SeedVcAstralConfig {
int64_t ssl_output_layer = 0;
int64_t encoder_dim = 0;
int64_t encoder_blocks = 0;
int64_t encoder_intermediate_dim = 0;
int64_t encoder_dilation = 0;
int64_t encoder_input_dim = 0;
int64_t quantizer_codebook_size = 0;
int64_t quantizer_dim = 0;
bool skip_ssl = false;
};
struct SeedVcV1DitConfig {
int64_t hidden_dim = 0;
int64_t num_heads = 0;
int64_t depth = 0;
int64_t block_size = 0;
int64_t in_channels = 0;
int64_t content_dim = 0;
int64_t content_codebook_size = 0;
int64_t n_f0_bins = 0;
bool style_condition = false;
bool f0_condition = false;
bool time_as_token = false;
bool style_as_token = false;
bool uvit_skip_connection = false;
bool long_skip_connection = false;
std::string final_layer_type;
};
struct SeedVcV1WavenetConfig {
int64_t hidden_dim = 0;
int64_t num_layers = 0;
int64_t kernel_size = 0;
int64_t dilation_rate = 0;
bool style_condition = false;
};
struct SeedVcBigVganConfig {
int64_t sampling_rate = 0;
int64_t num_mels = 0;
int64_t n_fft = 0;
int64_t hop_size = 0;
int64_t win_size = 0;
int64_t upsample_initial_channel = 0;
bool snake_logscale = false;
std::vector<int64_t> upsample_rates;
std::vector<int64_t> upsample_kernel_sizes;
std::vector<int64_t> resblock_kernel_sizes;
};
struct SeedVcHiftConfig {
int64_t in_channels = 0;
int64_t base_channels = 0;
int64_t nb_harmonics = 0;
int64_t sampling_rate = 0;
float nsf_alpha = 0.0F;
float nsf_sigma = 0.0F;
float nsf_voiced_threshold = 0.0F;
std::vector<int64_t> upsample_rates;
std::vector<int64_t> upsample_kernel_sizes;
int64_t istft_n_fft = 0;
int64_t istft_hop = 0;
std::vector<int64_t> resblock_kernel_sizes;
std::vector<std::vector<int64_t>> resblock_dilation_sizes;
std::vector<int64_t> source_resblock_kernel_sizes;
std::vector<std::vector<int64_t>> source_resblock_dilation_sizes;
float lrelu_slope = 0.0F;
float audio_limit = 0.0F;
int64_t f0_num_class = 0;
int64_t f0_in_channels = 0;
int64_t f0_cond_channels = 0;
};
struct SeedVcConfig {
SeedVcMelConfig v2_mel;
SeedVcV2DitConfig v2_cfm;
SeedVcLengthRegulatorConfig v2_cfm_length_regulator;
SeedVcV2ArConfig v2_ar;
SeedVcLengthRegulatorConfig v2_ar_length_regulator;
SeedVcAstralConfig v2_astral_narrow;
SeedVcAstralConfig v2_astral_wide;
int64_t v2_style_embedding_size = 0;
int64_t v2_style_feat_dim = 0;
SeedVcMelConfig v1_mel;
SeedVcV1DitConfig v1_dit;
SeedVcLengthRegulatorConfig v1_length_regulator;
int64_t v1_style_dim = 0;
SeedVcV1WavenetConfig v1_wavenet;
SeedVcMelConfig v1_whisper_bigvgan_mel;
SeedVcV1DitConfig v1_whisper_bigvgan_dit;
SeedVcLengthRegulatorConfig v1_whisper_bigvgan_length_regulator;
SeedVcV1WavenetConfig v1_whisper_bigvgan_wavenet;
int64_t v1_whisper_bigvgan_style_dim = 0;
SeedVcMelConfig v1_xlsr_hift_mel;
SeedVcV1DitConfig v1_xlsr_hift_dit;
SeedVcLengthRegulatorConfig v1_xlsr_hift_length_regulator;
SeedVcV1WavenetConfig v1_xlsr_hift_wavenet;
int64_t v1_xlsr_hift_style_dim = 0;
SeedVcBigVganConfig bigvgan_22k;
SeedVcBigVganConfig bigvgan_44k;
SeedVcHiftConfig hift;
};
struct SeedVcAssets {
assets::ResourceBundle resources;
SeedVcConfig config;
std::shared_ptr<const assets::TensorSource> v2_ar_weights;
std::shared_ptr<const assets::TensorSource> v2_cfm_weights;
std::shared_ptr<const assets::TensorSource> v1_svc_weights;
std::shared_ptr<const assets::TensorSource> v1_whisper_bigvgan_weights;
std::shared_ptr<const assets::TensorSource> v1_xlsr_hift_weights;
std::shared_ptr<const assets::TensorSource> astral_bsq32_weights;
std::shared_ptr<const assets::TensorSource> astral_bsq2048_weights;
std::shared_ptr<const assets::TensorSource> campplus_weights;
std::shared_ptr<const assets::TensorSource> rmvpe_weights;
std::shared_ptr<const assets::TensorSource> hift_weights;
std::shared_ptr<const assets::TensorSource> bigvgan_22k_weights;
std::shared_ptr<const assets::TensorSource> bigvgan_44k_weights;
std::shared_ptr<const assets::TensorSource> whisper_small_weights;
std::shared_ptr<const assets::TensorSource> hubert_large_weights;
std::shared_ptr<const assets::TensorSource> wav2vec2_xlsr_weights;
};
std::shared_ptr<const SeedVcAssets> load_seed_vc_assets(const std::filesystem::path & model_path);
assets::TensorStorageType seed_vc_component_storage_type(
const assets::TensorSource & source,
std::string_view tensor_name,
assets::TensorStorageType requested_type);
} // namespace engine::models::seed_vc