Files
tts/scripts/generate/generate_final.py
2026-01-19 10:27:41 +08:00

95 lines
2.9 KiB
Python

import os
import sys
import soundfile as sf
import numpy as np
import time
# 设置路径
WORKSPACE = "/root/tts"
OUTPUT_DIR = os.path.join(WORKSPACE, "audio_files")
OUTPUT_FILE = os.path.join(OUTPUT_DIR, "wuzidengke_final.wav")
# 确保输出目录存在
os.makedirs(OUTPUT_DIR, exist_ok=True)
print(f"✅ 输出目录创建成功: {OUTPUT_DIR}")
# 添加VoxCPM到Python路径
sys.path.insert(0, os.path.join(WORKSPACE, "VoxCPM", "src"))
print(f"✅ 添加VoxCPM路径: {os.path.join(WORKSPACE, 'VoxCPM', 'src')}")
# 导入VoxCPM
from voxcpm.core import VoxCPM
# 要生成的文本
text = "老牛 只有 累死的命,那是 舐犊跪乳 的 恩情! 替罪 才是 羔羊的运,自有 虎踞龙盘 的 妖精! 亢龙 有悔 悔断了筋,那是 哪吒抽筋 的 极刑! 黑鱼 贪食 吞下了肉,那是 人为刀俎 的 报应!"
print(f"📄 要生成的文本: {text}")
# 使用本地模型路径
local_model_path = "/root/tts/VoxCPM/models/openbmb__VoxCPM1.5"
print(f"🔍 检查模型路径: {local_model_path}")
if os.path.exists(local_model_path):
print(f"✅ 模型路径存在")
else:
print(f"❌ 模型路径不存在,尝试使用另一个路径...")
local_model_path = "/root/tts/VoxCPM/models/VoxCPM1.5"
if os.path.exists(local_model_path):
print(f"✅ 找到模型路径: {local_model_path}")
else:
print(f"❌ 找不到模型路径")
sys.exit(1)
print(f"\n🚀 开始初始化模型...")
start_time = time.time()
# 初始化模型
model = VoxCPM(
voxcpm_model_path=local_model_path,
enable_denoiser=False,
optimize=False
)
print(f"✅ 模型初始化完成,耗时: {time.time()-start_time:.2f}")
print(f"\n🎵 开始生成音频...")
start_time = time.time()
# 生成音频(不使用参考音频,使用默认音色)
audio = model.generate(
text=text,
cfg_value=2.0,
inference_timesteps=20,
normalize=True
)
print(f"✅ 音频生成完成,耗时: {time.time()-start_time:.2f}")
print(f"🎵 音频信息:")
print(f" - 类型: {type(audio)}")
print(f" - 形状: {audio.shape}")
print(f" - 长度: {len(audio)} samples")
print(f" - 最小值: {np.min(audio):.6f}")
print(f" - 最大值: {np.max(audio):.6f}")
print(f" - 采样率: 44100 Hz")
print(f" - 时长: {len(audio)/44100:.2f}")
# 保存音频
print(f"\n💾 保存音频到: {OUTPUT_FILE}")
sf.write(OUTPUT_FILE, audio, 44100)
# 验证文件
if os.path.exists(OUTPUT_FILE):
file_size = os.path.getsize(OUTPUT_FILE)
print(f"✅ 音频保存成功!")
print(f"📊 文件大小: {file_size} 字节 ({file_size/1024:.2f} KB)")
# 检查目录内容
print(f"\n📁 目录 {OUTPUT_DIR} 内容:")
for item in os.listdir(OUTPUT_DIR):
item_path = os.path.join(OUTPUT_DIR, item)
if os.path.isfile(item_path):
print(f" 📄 {item} ({os.path.getsize(item_path)} 字节)")
else:
print(f"❌ 音频保存失败!")
print(f"\n🎉 任务完成!")