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 文件。")
相关推荐
hongtianzai2 小时前
Laravel6.x重磅发布:LTS版本新特性全解析
c语言·开发语言·php·laravel
dapeng28702 小时前
用Python破解简单的替换密码
jvm·数据库·python
setmoon2142 小时前
Python数据库操作:SQLAlchemy ORM指南
jvm·数据库·python
sqyno1sky2 小时前
高级爬虫技巧:处理JavaScript渲染(Selenium)
jvm·数据库·python
kgduu2 小时前
js之网络请求与远程资源
开发语言·javascript·网络
酉鬼女又兒2 小时前
零基础入门前端JavaScript 核心语法:var/let/const、箭头函数与 setTimeout 循环陷阱全解析(可用于备赛蓝桥杯Web应用开发)
开发语言·前端·javascript·蓝桥杯
暮冬-  Gentle°2 小时前
设计模式在C++中的实现
开发语言·c++·算法
2501_908329852 小时前
实时音频处理C++实现
开发语言·c++·算法
dapeng28702 小时前
移动语义与完美转发详解
开发语言·c++·算法