python cosyVoice实现tts文本转语音、音频(未完成)

文章目录

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 文件。")
相关推荐
做怪小疯子7 小时前
华为笔试0429
python·numpy
Warson_L8 小时前
Dictionary
python
JAVA面经实录9178 小时前
Java企业级工程化·终极完整版背诵手册(无遗漏、全覆盖、面试+落地通用)
java·开发语言·面试
周杰伦fans9 小时前
AutoCAD .NET 二次开发:深入理解 EntityJig 的工作原理与正确实现
开发语言·.net
寒山李白10 小时前
解决 python-docx 生成的 Word 文档打开时弹出“无法读取内容“警告
python·word·wps·文档·docx·qoder
2401_8323655210 小时前
JavaScript中rest参数(...args)取代arguments的优势
jvm·数据库·python
Sirius.z10 小时前
第J3周:DenseNet121算法详解
python
Bat U10 小时前
JavaEE|多线程初阶(七)
java·开发语言
谭欣辰11 小时前
C++ 排列组合完整指南
开发语言·c++·算法