From 0fd3c7d935c71560424ce7553c283ba0a45f09d6 Mon Sep 17 00:00:00 2001 From: jhqxxx Date: Tue, 14 Oct 2025 20:42:03 +0800 Subject: [PATCH] delete some use --- src/models/voxcpm/audio_vae.rs | 2 +- src/models/voxcpm/model.rs | 13 ++++++----- src/models/voxcpm/tokenizer.rs | 3 +-- src/utils/audio_utils.rs | 16 ++++--------- tests/messy_test.rs | 1 - tests/test_voxcpm.rs | 42 +++++++++++++++++----------------- 6 files changed, 35 insertions(+), 42 deletions(-) diff --git a/src/models/voxcpm/audio_vae.rs b/src/models/voxcpm/audio_vae.rs index b7b7395..4b68b15 100644 --- a/src/models/voxcpm/audio_vae.rs +++ b/src/models/voxcpm/audio_vae.rs @@ -453,7 +453,7 @@ impl CausalDecoder { } pub fn forward(&self, x: &Tensor) -> Result { - let x = self.model0.forward(x)?; + let x = self.model0.forward(x)?; let mut x = self.model1.forward(&x)?; for model_i in &self.model2_5 { x = model_i.forward(&x)?; diff --git a/src/models/voxcpm/model.rs b/src/models/voxcpm/model.rs index d7b680d..d3c03a5 100644 --- a/src/models/voxcpm/model.rs +++ b/src/models/voxcpm/model.rs @@ -203,9 +203,9 @@ impl UnifiedCFM { estimator: VoxCPMLocDiT, mean_mode: bool, ) -> Result { - let solver = cfm_params.solver; - let sigma_min = cfm_params.sigma_min; - let t_scheduler = cfm_params.t_scheduler; + // let solver = cfm_params.solver; + // let sigma_min = cfm_params.sigma_min; + // let t_scheduler = cfm_params.t_scheduler; Ok(Self { // solver, // sigma_min, @@ -305,9 +305,9 @@ impl UnifiedCFM { st_star = st_star.reshape(vec_shape)?; } let cfg = cfg_dphi_dt.broadcast_mul(&st_star)?; - dphi_dt = cfg.add(&dphi_dt.sub(&cfg)?.affine(cfg_value, 0.0)?)?; + dphi_dt = cfg.add(&dphi_dt.sub(&cfg)?.affine(cfg_value, 0.0)?)?; // step步的预测噪声 } - x = x.broadcast_sub(&dphi_dt.broadcast_mul(&dt)?)?; + x = x.broadcast_sub(&dphi_dt.broadcast_mul(&dt)?)?; // 逐步去噪 t = t.sub(&dt)?; sol.push(x.clone()); if step < t_span_len - 1 { @@ -598,10 +598,12 @@ impl VoxCPMModel { inference_timesteps, cfg_value, )?; + println!("laten_pred: {}", latent_pred); let decode_audio = self .audio_vae .decode(&latent_pred.to_dtype(DType::F32)?)? .squeeze(1)?; + println!("decode_audio: {}", decode_audio); let decode_audio_len = decode_audio.dim(D::Minus1)? - 640 - 640; let decode_audio = decode_audio.narrow(D::Minus1, 640, decode_audio_len)?; Ok(decode_audio) @@ -661,7 +663,6 @@ impl VoxCPMModel { let dit_hidden_2 = self.res_to_dit_proj.forward(&residual_hidden)?; // [b, h_dit] let dit_hidden = dit_hidden_1.add(&dit_hidden_2)?; let cond = prefix_feat_cond.transpose(1, 2)?.contiguous()?; - let pred_feat = self .feat_decoder .forward( diff --git a/src/models/voxcpm/tokenizer.rs b/src/models/voxcpm/tokenizer.rs index 0c913d3..cbda4d5 100644 --- a/src/models/voxcpm/tokenizer.rs +++ b/src/models/voxcpm/tokenizer.rs @@ -1,5 +1,4 @@ use anyhow::{Ok, Result, anyhow}; -use candle_core::Tensor; use tokenizers::Tokenizer; pub struct SingleChineseTokenizer { @@ -48,7 +47,7 @@ impl SingleChineseTokenizer { // println!("tokens: {:?}", tokens); let mut split_character = Vec::new(); for token in tokens { - let clean_token = token.replace("▁", "to"); + let clean_token = token.replace("▁", ""); if self.multichar_tokens.contains(&clean_token) { let chars: Vec = clean_token.chars().map(|c| c.to_string()).collect(); split_character.extend(chars); diff --git a/src/utils/audio_utils.rs b/src/utils/audio_utils.rs index ccdc06a..fc33cef 100644 --- a/src/utils/audio_utils.rs +++ b/src/utils/audio_utils.rs @@ -1,9 +1,8 @@ use anyhow::{Result, anyhow}; -use candle_core::{D, DType, Device, Tensor}; -use candle_nn::{Conv1d, Conv1dConfig, Module, conv1d_no_bias}; +use candle_core::{D, Device, Tensor}; +use candle_nn::{Conv1d, Conv1dConfig, Module}; use hound::{SampleFormat, WavReader}; -use rocket::futures::future::ok; - +use num::integer::gcd; use std::f64::consts::PI; use std::path::Path; @@ -14,10 +13,6 @@ pub enum ResamplingMethod { SincInterpKaiser, } -// 计算最大公约数 -fn gcd(a: i64, b: i64) -> i64 { - if b == 0 { a } else { gcd(b, a % b) } -} // 零阶修正贝塞尔函数 I0 fn i0(x: f32) -> f32 { @@ -65,12 +60,12 @@ pub fn get_sinc_resample_kernel( let width_f = (lowpass_filter_width as f64) * (orig_freq as f64) / base_freq; let width = width_f.ceil() as i64; - // 创建索引数组 [1, 1, 2*width + orig_freq_reduced] + // 创建索引数组 [1, 1, 2*width + orig_freq] let idx = Tensor::arange(-width as f32, (width + orig_freq) as f32, device)? .affine(1.0 / orig_freq as f64, 0.0)? .unsqueeze(0)? .unsqueeze(0)?; - // 创建时间数组 t [new_freq_reduced, 1, idx_len] + // 创建时间数组 t [new_freq, 1, idx_len] let t = Tensor::arange_step(0.0, -new_freq as f32, -1.0, device)? .affine(1.0 / new_freq as f64, 0.0)? .unsqueeze(D::Minus1)? @@ -270,7 +265,6 @@ pub fn load_audio>(path: P, device: Device) -> Result<(Tensor, us &device, )? .t()?; - // println!("audio channels: {}", spec.channels); if spec.channels > 1 { // 对channel通道求平均, channel维度变为1 audio_tensor = audio_tensor.mean_keepdim(0)?; diff --git a/tests/messy_test.rs b/tests/messy_test.rs index 4b10d68..9e916c2 100644 --- a/tests/messy_test.rs +++ b/tests/messy_test.rs @@ -1,6 +1,5 @@ use aha::utils::audio_utils::{load_audio_with_resample}; use anyhow::Result; -use candle_core::Tensor; #[test] fn messy_test() -> Result<()> { diff --git a/tests/test_voxcpm.rs b/tests/test_voxcpm.rs index 72bbea5..36ae8f4 100644 --- a/tests/test_voxcpm.rs +++ b/tests/test_voxcpm.rs @@ -22,28 +22,12 @@ fn voxcpm_generate() -> Result<()> { let i_start = Instant::now(); // let generate = voxcpm_generate.generate_simple("太阳当空照,花儿对我笑,小鸟说早早早".to_string())?; - // let generate = voxcpm_generate.generate( - // "太阳当空照,花儿对我笑,小鸟说早早早".to_string(), - // Some("啥子小师叔,打狗还要看主人,你再要继续,我,就是你的对手".to_string()), - // Some("./assets/audio/voice_01.wav".to_string()), - // // Some("一定被灰太狼给吃了,我已经为他准备好了花圈了".to_string()), - // // Some("./assets/audio/voice_05.wav".to_string()), - // 2, - // 100, - // 10, - // 2.0, - // false, - // 6.0, - // )?; - - // 创建prompt_cache - let _ = voxcpm_generate.build_prompt_cache( - "啥子小师叔,打狗还要看主人,你再要继续,我,就是你的对手".to_string(), - "./assets/audio/voice_01.wav".to_string(), - )?; - // 使用prompt_cache生成语音 - let generate = voxcpm_generate.generate_use_prompt_cache( + let generate = voxcpm_generate.generate( "太阳当空照,花儿对我笑,小鸟说早早早".to_string(), + // Some("啥子小师叔,打狗还要看主人,你再要继续,我,就是你的对手".to_string()), + // Some("./assets/audio/voice_01.wav".to_string()), + Some("一定被灰太狼给吃了,我已经为他准备好了花圈了".to_string()), + Some("./assets/audio/voice_05.wav".to_string()), 2, 100, 10, @@ -52,6 +36,22 @@ fn voxcpm_generate() -> Result<()> { 6.0, )?; + // 创建prompt_cache + // let _ = voxcpm_generate.build_prompt_cache( + // "啥子小师叔,打狗还要看主人,你再要继续,我,就是你的对手".to_string(), + // "./assets/audio/voice_01.wav".to_string(), + // )?; + // // 使用prompt_cache生成语音 + // let generate = voxcpm_generate.generate_use_prompt_cache( + // "太阳当空照,花儿对我笑,小鸟说早早早".to_string(), + // 2, + // 100, + // 10, + // 2.0, + // false, + // 6.0, + // )?; + let i_duration = i_start.elapsed(); println!("Time elapsed in generate is: {:?}", i_duration); let _ = save_wav(&generate, "voxcpm.wav")?;