add moss-tts-nano

This commit is contained in:
jhqxxx
2026-05-11 16:15:09 +08:00
parent d38ed80ab4
commit a14b9e1e90
23 changed files with 338 additions and 225 deletions
+2 -2
View File
@@ -1,5 +1,5 @@
use aha::models::{
deepseek_ocr::config::DeepseekOCRConfig, hunyuan_ocr::config::HunYuanVLConfig, lfm2::config::Lfm2Config, lfm2vl::config::{Lfm2ProcessorConfig, Lfm2VLConfig}, minicpm4::config::MiniCPM4Config, moss::config::{MossAudioTokenizerConfig, MossTTSConfig}, paddleocr_vl::config::PaddleOCRVLConfig, qwen2_5vl::config::Qwen2_5VLConfig, qwen3vl::config::Qwen3VLConfig, voxcpm::config::VoxCPMConfig
deepseek_ocr::config::DeepseekOCRConfig, hunyuan_ocr::config::HunYuanVLConfig, lfm2::config::Lfm2Config, lfm2vl::config::{Lfm2ProcessorConfig, Lfm2VLConfig}, minicpm4::config::MiniCPM4Config, moss_audio_tokenizer_nano::config::MossAudioTokenizerConfig, moss_tts_nano::config::MossTTSConfig, paddleocr_vl::config::PaddleOCRVLConfig, qwen2_5vl::config::Qwen2_5VLConfig, qwen3vl::config::Qwen3VLConfig, voxcpm::config::VoxCPMConfig
};
use anyhow::Result;
@@ -128,4 +128,4 @@ fn moss_tts_config() -> Result<()> {
let config: MossTTSConfig = serde_json::from_slice(&std::fs::read(config_path)?)?;
println!("{:?}", config);
Ok(())
}
}
+7 -5
View File
@@ -1,4 +1,4 @@
use aha::models::moss::generate::MossTTSGenerate;
use aha::models::moss_tts_nano::generate::MossTTSGenerate;
use anyhow::Result;
#[test]
@@ -10,11 +10,13 @@ fn moss_tts() -> Result<()> {
let audio_tokenizer_path = format!("{}/openmoss/MOSS-Audio-Tokenizer-Nano/", save_dir);
let mut model = MossTTSGenerate::init(&tts_path, &audio_tokenizer_path, None, None)?;
let _ = model.generate(
"您好啊,吃饭了吗,吃的啥啊中午",
Some("file://./assets/audio/jiangjiang.wav"),
Some("哈喽大家好,我是蒋蒋"),
Some(aha::models::moss::tts_nano::MossTTSMode::Continuation),
"你在干吗啊",
// None,
Some("file://./assets/audio/jiangjiang.wav"),
None,
// Some("哈喽大家好,我是蒋蒋"),
// Some(aha::models::moss_tts_nano::model::MossTTSMode::Continuation),
None,
)?;
Ok(())
}
+3 -3
View File
@@ -6,7 +6,7 @@ use aha::{
GenerateModel,
voxcpm::{generate::VoxCPMGenerate, tokenizer::SingleChineseTokenizer},
},
utils::audio_utils::{extract_and_save_audio_from_response, save_wav},
utils::audio_utils::{extract_and_save_audio_from_response, save_wav_mono},
};
use anyhow::{Ok, Result};
@@ -54,7 +54,7 @@ fn voxcpm_use_message_generate() -> Result<()> {
}
let i_duration = i_start.elapsed();
println!("Time elapsed in generate is: {:?}", i_duration);
// save_wav(&generate, "voxcpm.wav", 16000)?;
// save_wav_mono(&generate, "voxcpm.wav", 16000)?;
Ok(())
}
@@ -105,7 +105,7 @@ fn voxcpm_generate() -> Result<()> {
let i_duration = i_start.elapsed();
println!("Time elapsed in generate is: {:?}", i_duration);
save_wav(&generate, "voxcpm.wav", 16000)?;
save_wav_mono(&generate, "voxcpm.wav", 16000)?;
Ok(())
}
+3 -3
View File
@@ -7,7 +7,7 @@ use aha::{
GenerateModel,
voxcpm::{generate::VoxCPMGenerate, tokenizer::SingleChineseTokenizer},
},
utils::audio_utils::{extract_and_save_audio_from_response, save_wav},
utils::audio_utils::{extract_and_save_audio_from_response, save_wav_mono},
};
use anyhow::{Ok, Result};
@@ -106,7 +106,7 @@ fn voxcpm1_5_generate() -> Result<()> {
let i_duration = i_start.elapsed();
println!("Time elapsed in generate is: {:?}", i_duration);
save_wav(&generate, "voxcpm1_5.wav", 44100)?;
save_wav_mono(&generate, "voxcpm1_5.wav", 44100)?;
Ok(())
}
@@ -169,7 +169,7 @@ fn voxcpm_refact_generate() -> Result<()> {
std::thread::sleep(std::time::Duration::from_secs(2));
let i_duration = i_start.elapsed();
println!("Time elapsed in generate is: {:?}", i_duration);
save_wav(
save_wav_mono(
&generate,
"voxcpm.wav",
voxcpm_generate.sample_rate() as u32,
+5 -2
View File
@@ -444,11 +444,14 @@ fn moss_audio_tokenizer_nano_weight() -> Result<()> {
// cargo test -F cuda --test weight_test moss_audio_tokenizer_nano_weight -r -- --nocapture
let save_dir =
aha::utils::get_default_save_dir().ok_or(anyhow::anyhow!("Failed to get save dir"))?;
let model_path = format!("{}/openmoss/MOSS-Audio-Tokenizer-Nano/model-00001-of-00001.safetensors", save_dir);
let model_path = format!(
"{}/openmoss/MOSS-Audio-Tokenizer-Nano/model-00001-of-00001.safetensors",
save_dir
);
let device = get_device(None);
let weights = safetensors::load(model_path, &device)?;
for (key, tensor) in weights.iter() {
println!("=== {} === {:?}", key, tensor);
}
Ok(())
}
}