80 lines
2.2 KiB
Python
80 lines
2.2 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
使用VoxCPM生成指定文本的音频
|
|
文字内容:老牛只有累死的命,那是舐犊跪乳的恩情!
|
|
"""
|
|
import os
|
|
import sys
|
|
|
|
# 设置路径
|
|
WORKSPACE = "/root/tts"
|
|
VOXCPM_DIR = os.path.join(WORKSPACE, "VoxCPM")
|
|
|
|
# 确保输出目录存在
|
|
OUTPUT_DIR = os.path.join(WORKSPACE, "audio_files")
|
|
os.makedirs(OUTPUT_DIR, exist_ok=True)
|
|
|
|
# 要生成的文字内容
|
|
TEXT_TO_SPEAK = """老牛 只有 累死的命,那是 舐犊跪乳 的 恩情!
|
|
替罪 才是 羔羊的运,自有 虎踞龙盘 的 妖精!
|
|
亢龙 有悔 悔断了筋,那是 哪吒抽筋 的 极刑!
|
|
黑鱼 贪食 吞下了肉,那是 人为刀俎 的 报应!"""
|
|
|
|
# 使用VoxCPM自带的示例音频
|
|
REFERENCE_FILE = os.path.join(VOXCPM_DIR, "examples", "example.wav")
|
|
|
|
print("=" * 60)
|
|
print("VoxCPM 文本转语音生成")
|
|
print("=" * 60)
|
|
print(f"参考语音文件: {REFERENCE_FILE}")
|
|
print(f"生成文字内容:\n{TEXT_TO_SPEAK}")
|
|
|
|
# 导入VoxCPM
|
|
sys.path.insert(0, VOXCPM_DIR)
|
|
from app import VoxCPMDemo
|
|
|
|
try:
|
|
# 切换到VoxCPM目录
|
|
os.chdir(VOXCPM_DIR)
|
|
|
|
# 初始化
|
|
print("\n正在初始化VoxCPMDemo...")
|
|
demo = VoxCPMDemo()
|
|
|
|
# 加载模型
|
|
print("正在加载VoxCPM模型...")
|
|
model = demo.get_or_load_voxcpm()
|
|
|
|
# 生成音频
|
|
print("\n正在生成音频...")
|
|
sample_rate, wav = demo.generate_tts_audio(
|
|
text_input=TEXT_TO_SPEAK,
|
|
prompt_wav_path_input=None, # 不使用参考语音,使用默认音色
|
|
prompt_text_input=None,
|
|
cfg_value_input=2.0,
|
|
inference_timesteps_input=20,
|
|
do_normalize=False,
|
|
denoise=False
|
|
)
|
|
|
|
# 保存音频
|
|
output_file = os.path.join(OUTPUT_DIR, "wuzidengke_default_voice.wav")
|
|
import soundfile as sf
|
|
sf.write(output_file, wav, sample_rate)
|
|
|
|
print(f"\n✅ 音频生成成功!")
|
|
print(f" 采样率: {sample_rate} Hz")
|
|
print(f" 音频长度: {len(wav)} samples")
|
|
print(f" 时长: {len(wav) / sample_rate:.2f} 秒")
|
|
print(f" 保存路径: {output_file}")
|
|
|
|
except Exception as e:
|
|
print(f"\n❌ 错误: {e}")
|
|
import traceback
|
|
traceback.print_exc()
|
|
sys.exit(1)
|
|
|
|
print("\n" + "=" * 60)
|
|
print("生成完成!")
|
|
print("=" * 60)
|