【避坑全攻略】如何让私人的LLM学GPT4o一样说话——ChatTTS

OpenAI 发布 GPT4o 之后,使得越来越多的人都开始幻想属于自己的AI“伴侣”,这最让人惊艳的就是他们出色的TTS技术。而在此之前,主流的开源TTS有 XTTS 2 和 Bark。而近日,一个名为 ChatTTS 文本转语音项目爆火出圈,引来大家极大的关注。

在这里插入图片描述

项目地址:https://github.com/2noise/ChatTTS/tree/main

官方描述:ChatTTS 是专为 LLM 助手等对话场景设计的文本到语音模型。它支持中英文两种语言。我们的模型经过 100,000+ 小时的中英文训练。HuggingFace 上的开源版本是不含 SFT 的 40,000 小时预训练模型。

特点

  • 对话式 TTS: ChatTTS 针对基于对话的任务进行了优化,可实现自然且富有表现力的语音合成。它支持多人发言,促进互动对话。
  • 细粒度控制: 该模型可预测和控制细粒度的前音特征,包括笑声、停顿和插话。
  • 更好的拟声: ChatTTS 在拟声方面超越了大多数开源 TTS 模型。我们提供预训练模型,以支持进一步的研究和开发。

commit fb54155b47404dbf7f61f230b117cf36b577ffec
Code

import ChatTTS
from IPython.display import Audio

chat = ChatTTS.Chat()
chat.load_models()

texts = ["作者写百草园,以“乐”为中心,以简约生动的文字,描绘了一个奇趣无穷的儿童乐园,其间穿插“美女蛇”的传说和冬天雪地捕鸟的故事,动静结合,详略得当,趣味无穷。",]

wavs = chat.infer(texts, use_decoder=True)
Audio(wavs[0], rate=24_000, autoplay=True)

高级用法

###################################
# Sample a speaker from Gaussian.
import torch
std, mean = torch.load('ChatTTS/asset/spk_stat.pt').chunk(2)
rand_spk = torch.randn(768) * std + mean

params_infer_code = {
  'spk_emb': rand_spk, # add sampled speaker 
  'temperature': .3, # using custom temperature
  'top_P': 0.7, # top P decode
  'top_K': 20, # top K decode
}

###################################
# For sentence level manual control.

# use oral_(0-9), laugh_(0-2), break_(0-7) 
# to generate special token in text to synthesize.
params_refine_text = {
  'prompt': '[oral_2][laugh_0][break_6]'
} 

wav = chat.infer("作者写百草园,以“乐”为中心,以简约生动的文字,描绘了一个奇趣无穷的儿童乐园,其间穿插“美女蛇”的传说和冬天雪地捕鸟的故事,动静结合,详略得当,趣味无穷。", params_refine_text=params_refine_text, params_infer_code=params_infer_code)

Audio(wav[0], rate=24_000, autoplay=True)
###################################
# For word level manual control.
text = 'What is [uv_break]your favorite english food?[laugh][lbreak]'
wav = chat.infer(text, skip_refine_text=True, params_infer_code=params_infer_code)

Audio(wav[0], rate=24_000, autoplay=True)

这里进度条跟不上4090的速度,而且作者没写Audio,导致我误认为挂了。。。(我在秋山涉面前,86太慢了)

commit 1c022eeebe577ba3651f4e568fa2dccabaf16e78
拉了新版的

 except:
    197     self.logger.log(logging.WARNING, f'Package nemo_text_processing not found! \
    198         Run: conda install -c conda-forge pynini=2.1.5 && pip install nemo_text_processing')
--> 199 self.normalizer[lang] = partial(Normalizer(input_case='cased', lang=lang).normalize, verbose=False, punct_post_process=True)

UnboundLocalError: local variable 'Normalizer' referenced before assignment

我看了一下 https://github.com/2noise/ChatTTS/issues/164,把提示的 conda install -c conda-forge pynini=2.1.5 && pip install nemo_text_processing 运行一遍。

秀儿,怎么不把 requirements.txt更新一下?

Code

# Import necessary libraries and configure settings
import torch
import torchaudio
torch._dynamo.config.cache_size_limit = 64
torch._dynamo.config.suppress_errors = True
torch.set_float32_matmul_precision('high')

import ChatTTS
from IPython.display import Audio

# Initialize and load the model: 
chat = ChatTTS.Chat()
chat.load_models(compile=False) # Set to True for better performance

# Define the text input for inference (Support Batching)
texts = [
    "So we found being competitive and collaborative was a huge way of staying motivated towards our goals, so one person to call when you fall off, one person who gets you back on then one person to actually do the activity with.",
    ]

# Perform inference and play the generated audio
wavs = chat.infer(texts)
Audio(wavs[0], rate=24_000, autoplay=True)

# Save the generated audio 
torchaudio.save("output.wav", torch.from_numpy(wavs[0]), 24000)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue3集成Phaser-飞机大战游戏(设计与源码)

文章目录 引言项目初始化游戏设计和结构游戏程序实现Vue页面嵌入PhaserPreloader 场景加载游戏场景功能实现功能类定义Boom爆炸类Bullet子弹类Enemy敌军类Player玩家类End游戏结束类 总结 更多相关内容可查看 引言 飞机大战(也被称为射击游戏或空战游戏&#xff09…

PID算法入门

文章目录 122.12.22.3 344.14.24.3 1 e(t) 是偏差 实 和 目u(t) 是运算结果 2 层层叠加 得出完整的离散公式 2.1 kp 越大 系统偏差 减小的越快kp大的时候 会出现过冲现象? 0.5 那个会快他解释过冲 : 0.2的 5分钟正好到了 那0.5的五分钟 升的就比20多 就…

springboot 自带的定时任务

启用springboot 定时任务 在springboot 启动类上增加EnableScheduling 注解 如下 SpringBootApplication EnableScheduling public class SpringApplication {public static void main(String[] args) {SpringApplication.run(SpringApplication.class, args);} }编写定时逻辑…

WHAT - 容器化系列(三)- Kubernetes - k8s

目录 一、前言二、Kubernetes 架构图三、KubernetesKubernetes和Docker的关系最小调度单元Pod 四、基本概念容器生态和标准化资源Workload资源:控制器对象服务担保Service&Ingress1. 两者的介绍以及与 OSI 七层模型关系2. 常见的 Service 类型3. Ingress 和 Ing…

自然资源-农村土地流转知识全解

自然资源-农村土地流转知识全解 随着农村经济的发展和城市化进程的加快,农村土地面临着多方面的压力,如人口增长、城市扩张、环境恶化等。这些压力导致了农村土地利用率低、经济效益差、农民收入水平低、农村社会经济不发达等问题。因此,改变…

Rust 第三方库创建和导入(cargo --lib)

前言 日常开发过程中,难免会有一些工具方法,多个项目之间可能会重复使用。 所以将这些方法集成到一个第三方包中方便后期维护和管理, 比如工具函数如果需要修改,多个项目可能每个都需要改代码, 抽离到单独的包中只需要…

AI办公自动化:用kimi批量提取音频中的标题并重命名

很多音频文件,文件名很乱,需要根据音频信息中的标题聪明吗 在kimi中输入提示词: 你是一个Python编程专家,一步步的思考,完成以下脚本的撰写: 打开文件夹:E:\有声\a16z播客 读取里面所有的mp3格…

关于vlookup的第一个参数的个人理解

VLOOKUP(查阅值,包含查阅值和返回值的查找区域,查找区域中返回值的列号,精确查找或近似查找) 我个人理解,第一个参数应该叫线索值,因为我们要通过它去找与其对应的(也就是与其同行的…

Soulmask灵魂面甲服务器一键开服联机教程

1、购买后登录服务器(百度莱卡云) 进入控制面板后会出现正在安装的界面,安装大约5分钟(如长时间处于安装中请联系我们的客服人员) 2、创建端口 点击网络➡创建新的网络设置 需要创建两个端口,一个 查询端口…

SAP_SD模块-销售交货并开票后发现物料没维护价格的完整处理方法(含POD功能)

销售流程完结后,发现物料价格没维护时,如何处理 一、业务背景: 1、问题发现时间:2024年6月2日; 2、问题描述: 2024年5月份的单据业务存在交货成本和开票成本为0的单据&#x…

【Hive SQL 每日一题】统计指定范围内的有效下单用户

文章目录 测试数据需求说明需求实现 前言:本题制作参考牛客网进阶题目 —— SQL128 未完成试卷数大于1的有效用户 测试数据 -- 创建用户表 DROP TABLE IF EXISTS users; CREATE TABLE users (user_id INT,name STRING,age INT,gender STRING,register_date STRING…

cocos入门5:编辑器界面介绍

Cocos Creator是一款功能强大的跨平台游戏开发工具,其编辑器界面设计直观易用,提供了从资源管理、场景编辑到脚本编写等一站式解决方案。下面是对Cocos Creator编辑器界面的详细介绍: 一、界面布局 Cocos Creator编辑器界面通常包含以下几个…

【计算机毕设】基于SpringBoot的医院管理系统设计与实现 - 源码免费(私信领取)

免费领取源码 | 项目完整可运行 | v:chengn7890 诚招源码校园代理! 1. 研究目的 本项目旨在设计并实现一个基于SpringBoot的医院管理系统,以提高医院管理效率,优化医疗服务流程,提升患者就诊体验…

FL Studio Producer Edition 21.2.2.3914 所有插件版安装教程指南

FL Studio Producer Edition 21.2.2.3914 所有插件版是一款功能强大的软件音乐制作环境或数字音频工作站(DAW)。FL Studio 中文学习版可以帮助你制作出色的音乐,为您提供了一个集成的开发环境,使用起来非常简单有效,您…

2.4 操作系统死锁(死锁的概念、产生、防止、预防、避免)

文章目录 一、死锁的概念1.1 死锁、饥饿、死循环对比1.1.1 死锁(Deadlock)1.1.2 饥饿(Starvation)1.1.3 死循环(Infinite Loop) 1.2 死锁产生的条件 二、预防死锁三、避免死锁四、死锁的检测和解除4.1 资源…

Arduino 按钮及弹跳

所需元件 可插入面包板的按钮1个 220Ω电阻1个 10kΩ电阻1个 3mm或5mm LED 1个 面包板1块 Arduino Uno开发板1块 面包板连接线数条 使用外接电阻 将5V接到按钮,按钮的另一端串联1个10kΩ电阻再接地,这样的接法被称为下拉电阻(pull-down resistor)。若测…

Vue01-vue的简介

一、Vue是什么? 一套用于构建用户界面的渐进式javaScript框架。 构建用户界面: 渐进式: 目前Vue的地位:生态完善,国内前端工程师必备技能。 二、Vue的特点 一个XXX.vue就是一个组件,封装的概念&#xff0c…

智慧校园有哪些特征

随着科技的飞速进步,教育领域正经历着一场深刻的变革。智慧校园,作为这场变革的前沿代表,正在逐步重塑我们的教育理念和实践方式。它不仅仅是一个概念,而是一个集成了物联网、大数据、人工智能等先进技术的综合生态系统&#xff0…

QT 信号和槽 一对多关联示例,一个信号,多个槽函数响应,一个信号源如何绑定多个槽函数

在窗体里放置一个单行文本编辑控件(QLineEdit)、一个标签控件(QLabel)和一个文本浏览控件(QTextBrowser),在单行文 本编辑控件里的文本被编辑时,标签控件和文本浏览控件都会同步显示…

codefun的蓝桥杯国赛之旅

前言 好久没有刷算法了,今天完成了我的蓝桥杯国赛之旅! 总的来说,比赛的过程不是很顺利,只能ac两道题目,好多题都是有思路,但是要么是写不出来,要么是debug不出来,多重背包&#xf…