文章目录
chatTts需要连外网不好用,想着本地弄个。
阿里开源项目cosyVoice(舒适语音)(是cosy,不是cos)评级比较不错。
步骤
1、pycharm工作区新建文件夹cosyVoice-demo,进入文件夹clone代码。
https://github.com/FunAudioLLM/CosyVoice.git # 这个git地址
2、pycharm打开该项目,python解释器选3.10,版本很高容易不支持。
3、安装依赖
python
python -m pip install --upgrade pip
pip install torch torchaudio --index-url https://download.pytorch.org/whl/cu121
pip install -r requirements.txt
如果官方脚本不可用,手动安装(可选,这个作为requirements.txt备用):
python
pip install modelscope funasr hydra-core omegaconf conformer diffusers transformers accelerate soundfile librosa
**但是报错了:ModuleNotFoundError: No module named 'pkg_resources'
end of output
note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed to build 'openai-whisper' when getting requirements to build wheel**
安装了好多次还是过不去。
4、尝试取消隔离安装
python
pip install --no-build-isolation -r requirements.txt
跳过openai-whisper这个报错了,但是又遇到一堆报错,解不掉了,先这样吧。python大项目的依赖真心头疼。
5、新建test_cosyvoice.py文件,内容:
python
import os
import sys
import torch
from cosyvoice.cli.cosyvoice import CosyVoice
from cosyvoice.utils.file_utils import load_wav
# 初始化模型
# 注意:首次运行会自动下载模型,请确保网络连接正常
# 如果本地已下载,可以指定 local_dir
print("正在加载 CosyVoice 模型...")
cosyvoice = CosyVoice('iic/CosyVoice-300M')
# 如果是 SFT 版本 (指令控制更强),使用:
# cosyvoice = CosyVoice('iic/CosyVoice-300M-SFT')
output_dir = './output'
os.makedirs(output_dir, exist_ok=True)
print("模型加载完成,开始生成...")
# --- 场景 1: 零样本音色克隆 (Zero-Shot Cloning) ---
# 你需要准备一个参考音频文件 (ref.wav),时长 3-10 秒,清晰的人声
# 如果没有,可以先跳过此段,使用预置音色
ref_audio_path = 'assets/ref.wav' # 请替换为你自己的参考音频路径
if os.path.exists(ref_audio_path):
print(f"使用参考音频: {ref_audio_path} 进行音色克隆...")
prompt_speech_16k = load_wav(ref_audio_path, 16000)
# 生成语音
for i, j in enumerate(cosyvoice.inference_zero_shot(
'欢迎来到 2026 年,人工智能已经无处不在,你觉得今天天气怎么样?',
'这是一个非常神奇的时刻,我们终于实现了完美的语音合成。', # 参考音频对应的文本 (可选,但推荐提供以提高准确度)
prompt_speech_16k,
stream=False)):
output_path = f'{output_dir}/zero_shot_output_{i}.wav'
with open(output_path, 'wb') as f:
f.write(j['tts'].read())
print(f"零样本克隆完成,保存至: {output_path}")
else:
print("未找到参考音频,跳过零样本克隆测试。请将你的录音保存为 assets/ref.wav")
# --- 场景 2: 指令控制 (Instruct TTS) - 需要 SFT 模型 ---
# 注意:只有加载 'iic/CosyVoice-300M-SFT' 时才支持此功能
print("\n尝试指令控制生成 (需要 SFT 模型)...")
try:
# 重新初始化 SFT 模型 (如果上面没加载)
if 'cosyvoice_sft' not in locals():
cosyvoice_sft = CosyVoice('iic/CosyVoice-300M-SFT')
# 使用自然语言指令控制情感
text_with_instruction = "<|zh|><|happy|> 太棒了!我们终于成功了!<|end|>"
# 注意:不同版本的指令格式可能不同,以上仅为示例,具体参考官方文档
# 新版可能直接支持: "用开心的语气说:太棒了!"
# 这里演示标准的 SFT 推理 (假设模型支持)
for i, j in enumerate(cosyvoice_sft.inference_instruct(
'用非常悲伤且缓慢的语气朗读:雨一直在下,仿佛天空也在哭泣。',
'中文女', # 预设音色
stream=False)):
output_path = f'{output_dir}/instruct_output_{i}.wav'
with open(output_path, 'wb') as f:
f.write(j['tts'].read())
print(f"指令控制完成,保存至: {output_path}")
except Exception as e:
print(f"指令控制测试失败 (可能是模型版本不对): {e}")
print("\n所有任务结束!请在 output 文件夹查看生成的 wav 文件。")