首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Mac版ChatTTS-UI:一键文字转语音的神器,支持API调用!

最近有一个非常有趣的项目,叫做ChatTTS-UI。它是一个简单的本地网页界面,可以使用ChatTTS将文字合成为语音,还支持对外提供API接口。项目已经开源,大家可以在这里找到:https://github.com/jianchang512/ChatTTS-ui

软件界面

使用效果:

ChatTTS-UI的特点

相较于官方的使用页面,ChatTTS-UI有以下几个特点:

文字、数字和符号控制符混杂效果

优化中文文本归一化

添加速度控制(speed 1-9)

固定音色

增加 compile=true 以启用推理优化

数字转为对应语言的读法

增加中英分词功能

改进界面和API

增加 top_p 和 top_k 参数控制

多行文字按行合成

自定义音色获取种子值

允许跳过 refine text 阶段

网页在线文字合成

支持API接口

安装指南

为了简化安装流程,Mac爱范团队将上述工具封装成了一个独立的启动包,用户只需简单点击即可运行,无需配置繁琐的Python环境。以下是获取和安装该应用的详细步骤:

下载应用

前往下载页面:https://aifun.fans/271/,点击页面右侧的下载按钮进行下载。

注意:仅支持搭载有 Mac M1/2/3 系列芯片的设备。

安装步骤

从上述链接下载DMG镜像文件,将app文件拖拽到Applications文件夹中。

复制安装完成后,首次启动先不要在启动台打开,而是在应用程序文件夹右键打开,原因参考Mac 安装软件常见问题。

软件会自动在默认浏览器打开操作界面,此时可以开始在浏览器中使用。

图片ChatTTS使用技巧文本中可用的控制符号

你可以在原始待合成文本中穿插控制符号,目前支持笑声和停顿两种控制符。

[laugh] 代表笑声

[uv_break] 代表停顿

例如:

text="你好啊[uv_break]朋友们,听说今天是个好日子,难道[uv_break]不是吗[laugh]?"

在实际合成中,[laugh] 将被笑声替代,[uv_break] 处将加入停顿。对于笑声和停顿的强度,可以通过参数 params_refine_text 中传递 prompt 控制。

chat.infer([text],params_refine_text={"prompt":'[oral_2][laugh_0][break_6]'})

chat.infer([text],params_refine_text={"prompt":'[oral_2][laugh_2][break_4]'})

跳过 refine text 阶段

实际合成时会重新整理(refine text)插入控制符,如果不希望这样,可以将 skip_refine_text 参数设为 True。

chat.infer([text],skip_refine_text=True,params_refine_text={"prompt":'[oral_2][laugh_0][break_6]'})

固定发音人音色

默认每次合成都随机调用不同音色,这点非常不友好。若要简单固定发音角色,可以手动设置一个随机数种子,然后获取一个随机说话人。

torch.manual_seed(2222)

rand_spk = chat.sample_random_speaker()

chat.infer([text], use_decoder=True,params_infer_code={'spk_emb': rand_spk})

经测试,2222 7869 6653 是男性音色,3333 4099 5099 是女性角色,更多角色可以自行调整不同的种子数测试。

使用API请求教程

请求方法: POST

请求地址: http://127.0.0.1:9966/tts

请求参数:

text: str | 必须, 要合成语音的文字

voice: int | 可选,默认 2222,  决定音色的数字, 2222 | 7869 | 6653 | 4099 | 5099,可选其一,或者任意传入将随机使用音色

prompt: str | 可选,默认 空, 设定 笑声、停顿,例如 [oral_2][laugh_0][break_6]

temperature: float | 可选,  默认 0.3

top_p: float |  可选, 默认 0.7

top_k: int |  可选, 默认 20

skip_refine: int |   可选, 默认0, 1=跳过 refine text,0=不跳过

custom_voice: int |  可选, 默认0,自定义获取音色值时的种子值,需要大于0的整数,如果设置了则以此为准,将忽略 voice

is_split: int | 可选,默认 0, 1=将数字转为文本以便正确发音,0=保持不变

返回: json数据

成功返回:

{code:0,msg:ok,audio_files:[dict1,dict2]}

其中 audio_files 是字典数组,每个元素dict为 {filename:wav文件绝对路径,url:可下载的wav网址}

失败返回:

{code:1,msg:错误原因}

API调用代码

import requests

res = requests.post('http://127.0.0.1:9966/tts', data={

"text": "若不懂无需填写",

"prompt": "",

"voice": "3333",

"temperature": 0.3,

"top_p": 0.7,

"top_k": 20,

"skip_refine": 0,

"custom_voice": 0,

"is_split": 1

})

print(res.json())

成功调用的结果:

{code:0, msg:'ok', audio_files:[{filename: E:/python/chattts/static/wavs/20240601-22_12_12-c7456293f7b5e4dfd3ff83bbd884a23e.wav, url: http://127.0.0.1:9966/static/wavs/20240601-22_12_12-c7456293f7b5e4dfd3ff83bbd884a23e.wav}]}

出错时的结果:

{code:1, msg:"error"}

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OCiQes44-wlV3yDQiae9CZ9g0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券