ChatTTS使用demo示例(包含长文本生成语音、固定音色pt文件)

news2024/10/9 18:15:49

ChatTTS使用demo示例(包含长文本生成语音、固定音色pt文件)

一、配置开发环境

安装anaconda,安装参考文章:https://blog.csdn.net/Q_fairy/article/details/129158178

建议anaconda最新版:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2024.06-1-Windows-x86_64.exe

pycharm 配置 anaconda 自行百度

Windows打开CMD命令时候,必须使用administrator管理员身份,切记切记!!!如果运行 conda activate ChatTTS 报错,请自行百度!!!

在这里插入图片描述

anaconda 的 Python虚拟环境名:ChatTTS,版本号:3.10

conda create --name ChatTTS python=3.10 -y

激活虚拟环境

conda activate ChatTTS

克隆源代码

git clone https://github.com/2noise/ChatTTS

切换到源代码目录

cd ChatTTS

安装Python依赖包

pip install -r requirements.txt

安装ChatTTS包:以下2种方式任一一种即可

pip install -e .
## pip install git+https://github.com/2noise/ChatTTS

最后,我们还需要安装 2 个依赖,主要是文本合成音频文件,不支持阿拉伯数字(这是一个坑):

pip install pysoundfile

conda install -c conda-forge pynini=2.1.5 && pip install WeTextProcessing==1.0.2

运行demo

# 创建文件夹 ChatTTS\examples\hsj 并创建文件 test_001.py
# 第一次运行会下载模型文件到当前目录ChatTTS\examples\hsj\asset(asset目录没有会自动创建),花费时间稍长,请耐心等待
cd ChatTTS\examples\hsj
python test_001.py

二、编写测试代码:test_001.py

import ChatTTS
import torch
import torchaudio
import numpy as np
from tools.normalizer import normalizer_zh_tn
'''
开源项目地址:https://github.com/2noise/ChatTTS
ChatTTS使用demo示例(包含长文本生成语音、固定音色pt文件)
由于电脑不才,无法GPU运行,故使用CPU方式加载音色pt文件运行测试
seed_1065_restored_emb.pt文件见附件
'''

###################################################################################################
# 初始化ChatTTS
chat = ChatTTS.Chat()
chat.load(compile=False)  # Set to True for better performance

###################################################################################################
# 短文本,单个30秒内
# texts = ["""
# 	《呐喊》是现代文学家鲁迅的短篇小说集,收录鲁迅于1918年至1922年所作的14篇短篇小说,1923年由北京新潮社出版,现编入《鲁迅全集》第1卷。
# 	小说集真实地描绘了从辛亥革命到五四运动时期的社会生活.
# 	从革命民主主义出发,抱着启蒙主义目的和人道主义精神,揭示了种种深层次的社会矛盾,
# 	表现出对民族生存浓重的忧患意识和对社会变革的强烈希望。
# 	"""]
###################################################################################################
# 长文本,多个短文本合成
# 每一行建议100字以内
texts = """
    《呐喊》是现代文学家鲁迅的短篇小说集,收录鲁迅于1918年至1922年所作的14篇短篇小说,1923年由北京新潮社出版,现编入《鲁迅全集》第1卷。
    小说集真实地描绘了从辛亥革命到五四运动时期的社会生活。
	从革命民主主义出发,抱着启蒙主义目的和人道主义精神,揭示了种种深层次的社会矛盾。
	表现出对民族生存浓重的忧患意识和对社会变革的强烈希望。
	《呐喊》是中国现代小说的开端与成熟的标志,开创了现代现实主义文学的先河。
	作品通过写实主义、象征主义、浪漫主义等多种手法,
	以传神的笔触和“画眼睛”、“写灵魂”的艺术技巧,
	形象生动地塑造了狂人、孔乙己、阿Q等一批不朽的艺术形象,
	深刻反映了19世纪末到20世纪20年代间中国社会生活的现状,
	有力揭露和鞭挞了封建旧恶势力,表达了作者渴望变革,为时代呐喊,希望唤醒国民的思想。
	奠定了鲁迅在中国现代文学史和现代文化史上的地位。
	1985年,日本出版的50卷本《世界最高杰作》,中国仅有《呐喊》与《论语》被收入;
	1999年6月,《呐喊》被《亚洲周刊》评选为20世纪中文小说100强之首。
	"""

###################################################################################################
# 固定音色pt文件和另外一些配置
# 固定音色pt文件下载: https://modelscope.cn/studios/ttwwwaa/ChatTTS_Speaker
# 随机pt
# rand_spk = chat.sample_random_speaker()

# 固定pt
# CPU模式:map_location=torch.device('cpu'), weights_only=True
fixed_spk = torch.load("./seed_1065_restored_emb.pt", map_location=torch.device('cpu'), weights_only=True)
params_infer_code = ChatTTS.Chat.InferCodeParams(
    prompt="[speed_4]",  # 速度(0-9)
    spk_emb=fixed_spk,  # add sampled speaker
    temperature=.3,  # using custom temperature
    top_P=0.7,  # top P decode
    top_K=20,  # top K decode
)
chat.normalizer.register('zh', normalizer_zh_tn())

###################################################################################################
# 停顿、笑声等配置
# use oral_(0-9), laugh_(0-2), break_(0-7)
# to generate special token in text to synthesize.
params_refine_text = ChatTTS.Chat.RefineTextParams(
    prompt='[oral_2][laugh_0][break_6]',
)

###################################################################################################
# 短文本,单个30秒内

# skip_refine_text:这个参数实际上是预处理文本,对于输入的文本会加入一些[uvbreak]的韵律标记,skip_refine_text = True则是预处理时候跳过(一般用于自己手动在texts已经加入了标记,无需code自动处理)
# wavs = chat.infer(
#     texts,
#     params_refine_text=params_refine_text,
#     params_infer_code=params_infer_code,
# )
#
# try:
#     torchaudio.save("seed_1065_restored_emb.wav", torch.from_numpy(wavs[0]).unsqueeze(0), 24000)
# except:
#     torchaudio.save("seed_1065_restored_emb.wav", torch.from_numpy(wavs[0]), 24000)


###################################################################################################
# 长文本,多个短文本合成

# 将文本按照\n换行拆分为短文本
wavs = []
inputs_text_tmp = texts.split("\n")
for item_tmp in inputs_text_tmp[:]:  # 使用切片创建迭代器的副本
    item_tmp = item_tmp.replace("\t", "").replace("《", "").replace("》", "")
    if len(item_tmp) > 100:
        raise Exception('每一行建议100字以内,程序即将终止!')
    if len(item_tmp) != 0:
        print("\n" + item_tmp)
        wavs.append(chat.infer(item_tmp,
                               params_refine_text=params_refine_text,
                               params_infer_code=params_infer_code)[0])

# 合并音频[见:np.concatenate函数demo]
# 将输出的语音保存为音频文件
wavs_cat = np.concatenate(wavs, axis=0)
# torchaudio.save("seed_1065_restored_emb_long_text.wav", torch.tensor(wavs_cat).unsqueeze(0), 24000)
torchaudio.save("seed_1065_restored_emb_long_text.wav", torch.from_numpy(wavs_cat).unsqueeze(0), 24000)
print("ChatTTS使用demo示例(包含长文本生成语音、固定音色pt文件)生成完毕!")




###################################################################################################
##################################  np.concatenate函数demo  ########################################
###################################################################################################
'''
import numpy as np

# axis=0:在第一维拼接:其他维度的需要是相同的维度;
# axis=1:在第二维拼接:其他维度的需要是相同的维度;(error)
# axis=-1:最后一维拼接:其他维度的需要是相同的维度;

# 两个数组
array1 = np.array([[1, 2], [3, 4]])
array2 = np.array([[5, 6], [7, 8]])

# 连接两个数组
# 沿着第一个轴(行方向)
np.concatenate((array1, array2), axis=0)
# 输出:
# [[1, 2],
#  [3, 4],
#  [5, 6],
#  [7, 8]]

# 沿着第二个轴(列方向)
np.concatenate((array1, array2), axis=-1)
# 输出:
# [[1, 2, 5, 6],
#  [3, 4, 7, 8]]
'''

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2199663.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

windows11下面使用Pyinstaller打包python程序

文章目录 一、安装Python二、安装pip三、通过pip安装pyinstaller四、使用pyinstaller打包python为二进制程序参考 一、安装Python 我这里直接下载的是Python的可执行程序包,打开即用的版本, 也可以按照以下的教程安装python工具到windows上面 &#…

海洋鱼类图像分类分割系统源码&数据集分享

海洋鱼类图像分类分割系统源码&数据集分享 [yolov8-seg-slimneck&yolov8-seg-attention等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Globa…

MySQL联合索引、索引下推Demo

1.联合索引 测试SQL语句如下:表test中共有4个字段(id, a, b, c),id为主键 drop table test;#建表 create table test(id bigint primary key auto_increment,a int,b int,c int )#表中插入数据 insert into test(a, b, c) values(1,2,3),(2,3,4),(4,5,…

数据分析Power BI设置万为单位的数据

玩过Power BI的同学都知道,power BI在度量值设置单位里,唯独没有万这个单位,但是我们可以自定义,操作过程如下: 1.用DAX新建单位表 单位 SELECTCOLUMNS( { ( "元", 1), ("万",10000), ("千…

清华大学经管学院朱武祥教授:五步构建高效的数据飞轮,提升企业核心竞争力

面对AI时代的到来,企业应积极拥抱这一变革,构建和优化自身的数据飞轮,让飞轮高速转动起来,为企业的创新发展持续赋能。 近期,清华管理评论发表了一篇名为《AI时代如何构建数据飞轮》的文章,引起了我们的重点…

Java 根据字符生成背景透明的图片

上代码 package com.example.demotest.controller;/*** Author shaolin* Date 2024-10-08 10:11**/import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.WritableRaster; impor…

手机 电脑 Pad 是如何得到IP地址的呢? 如何让你的设备自动获取IP地址?DHCP :给你 IP 地址的隐形人

我们每天都是用手机 电脑 Pad 一系列电子设备连接到网络中,然后网络中的每一个设备都有一个独一无二的IP地址,用来作为网络中的唯一标识,那这些设备上的IP地址是如何得到的呢? 在现代网络中,每一台设备都需要一个唯一的…

Kubernetes----基础命令合集

目录 一、命令概述 1.1命令分类 1.2 基本语法 二、查看基本信息 2.1 环境指令 2.1.1 查看版本信息 2.1.2 查看资源对象简写 2.1.3 添加补全信息 2.1.4 查看日志 2.1.5 查看集群信息 2.2 查看资源信息 2.2.1 获取资源相关信息 ① 查看集群组件状态 ② 查看命名空间…

7个维度点剖析地图投影 第6个最重要

摘要: 地图投影在制图学和地理信息系统 (GIS) 中发挥着至关重要的作用。然而,即使是地理空间行业中经验最丰富的专业人士,它们也常常令人们感到困惑。在大多数情况下,也许必须返回参考文档和材料来重新检查这些问题。 因此有许多令人费解的现象,例如您是否曾经看过世界地..…

nginx代理,nginx301跳转,nginx地址重写

ngin代理 假如你的地址是:http://192.168.1.2:8282 你的域名是:www.jjycheng.com 你想访问域名www.jjycheng.com时,实际请求的地址是http://192.168.1.2:8282,但浏览器上的地址不变。 此时,你用到的技术就是请求代理 代理.conf配置 http {server {listen 80; server_na…

【Parsec】一款安全高效的远程桌面软件

Parsec 是一款远程桌面软件,它允许用户通过P2P(点对点)技术远程访问和控制另一台计算机。以下是Parsec的一些主要作用、安全私密性特点以及优缺点: 作用: 远程游戏:用户可以远程访问高性能PC进行游戏&am…

Centos7.5 安装和配置jdk17

目录 一、下载JDK17包 二、将安装包放入服务器 三、解压jdk包到/usr/lib/jvm 四、修改JDK环境配置 1、打开配置文件 2、最后一行插入 3、立即生效 4、检查版本 一、下载JDK17包 访问网址:Java Downloads | Oraclehttps://www.oracle.com/java/technologies/downloads…

新硬盘第一次使用需要怎样做?

无论是组装新电脑,还是给现有电脑增加存储空间,我们需要进行一些安装硬盘和设置硬盘的操作。对于没有相关经验的用户来说,对于拿到手的新硬盘会感到手足无措,不知道应该从哪里开始。今天小编详细介绍一下新硬盘第一次使用时的流程…

中国内地高校2023年度捐赠收入排名更新 | 浙大领跑,宁波东方理工成最大黑马!

社会捐赠是世界一流大学办学经费的重要来源之一,也是评价世界一流大学的核心指标之一。 9月21日,支持湘潭大学建设捐赠与合作签约仪式暨“校友回湘”推进会议举行。株洲华锐精密工具股份有限公司向学校捐赠湘潭大学“华锐精密”研究院以及现金人民币&am…

基于springboot+vue的协同过滤电影推荐系统

一、系统架构 前端:vue2 | element-ui | html 后端:springboot | mybatis 环境:jdk1.8 | mysql | maven | node 二、代码及数据库 三、功能介绍 01. web端-首页1 02. web端-首页2 03. web端-注册 04. web端-登录 05…

GC9008为什么能替代MX6208应用于红外开关,电流开关上

GC9008作为一种新型集成电路,具备了多个方面的优势,使其能够有效替代MX6208。以下是GC9008替代MX6208的主要原因及其优势: 1. 更低的功耗 优势:GC9008在设计上进行了优化,能够在更低的电压下运行,从而显著…

以 AI 强化学习优化双边交易与借贷投资组合

作者:老余捞鱼 原创不易,转载请标明出处及原作者。 写在前面的话: 本研究提出基于强化学习的高风险环境投资组合管理模型,采用新环境公式和基于利润损失的奖励函数,用 Soft Actor-Critic 代理和卷积神经网络实现,管理 12 种加密资产投资组合并在 Binance 永续期货…

CTFshow 命令执行 web37-web40

目录 web37 方法一:php://input 方法二:data协议 web38 web39 web40 方法一:构造文件读取 方法二:构造数组rce web37 error_reporting(0); if(isset($_GET[c])){$c $_GET[c];if(!preg_match("/flag/i", $c)){incl…

Gin框架中实现路由分组

在Gin框架中实现路由分组非常简单,你可以使用Group方法来创建一个分组,然后在这个分组中定义相关的路由。 分组可以包含中间件、路由前缀等,这使得路由的组织和管理变得非常方便,尤其是在大型项目中。 使用Gin框架实现路由分组的…

鹧鸪云光伏软件全面解析

一、主要功能 光伏电站常用工具: 投融资估算:帮助用户进行光伏电站项目的投资预算和融资规划。 发电量计算:根据光伏电站的设计参数和当地气候条件,计算电站的发电量。 安装倾角测算:根据屋顶朝向和地理位置&#…