当前位置: 首页 > news >正文

在 Python 中实现语音合成的四种方法

1 离线合成 pytts

配置环境

$ apt-get update
$ apt-get install espeak
$ pip install pyttsx3
$ apt-get install ffmpeg
$ apt-get install alsa-utils

运行程序

import pyttsx3engine = pyttsx3.init()
engine.setProperty('rate', 150)
engine.setProperty('volume', 0.7)text = "你好,欢迎使用 pyttsx3 中文语音合成!"
engine.say(text)
engine.runAndWait()engine.save_to_file(text, 'output.wav')
engine.runAndWait()

描述:十几年前的老工具,用规则实现,虽然能用但效果不好

优点:可以离线使用

缺点:塑料声太严重,反正我接受不了

2 google 语音合成

配置环境

$ pip install gtts

运行程序

from gtts import gTTS
import osos.environ['HTTP_PROXY']='http://192.168.10.106:12346'
os.environ['HTTPS_PROXY']='http://192.168.10.106:12346'tts = gTTS('你好,世界', lang='zh-cn')
tts.save('hello_world.mp3')

描述:google 提供的 tts 服务,虽然免费但限制比较严重;当然也可以附加一些工具,来解决这个问题;如果用直接删帧的方法会明显影响音质。

优点:调用简单合成速度快,不需要申请帐号可直接使用

缺点:无法调节速度,只有正常和慢,无法精调;需要科学上网

文档:https://github.com/pndurette/gTTS

3 openai 语音合成

配置环境

$ pip install openai

运行程序

from pathlib import Path
from openai import OpenAIdef generate_speech(api_key, text, model, voice, file_path):client = OpenAI(api_key=api_key)
response = client.audio.speech.create(model=model,voice=voice,input=text
)path = Path(file_path)
with open(path, 'wb') as file:file.write(response.content)return f'save to: {path}'api_key = 'sk-xxx'
text = "测试一下openai的语音合成"
model="tts-1" # tts-1、tts-1-hd、tts-1、tts-1-hd
voice = "shimmer" # alloy、echo、fable、onyx、nova、shimmer
file_path = r"openai.mp3"print(generate_speech(api_key, text, model, voice, file_path))

描述:openai 提供的基于大模型的语言合成,效果好

优点:流畅自然,合成速度也能接受

缺点:需要 openai 帐号,需要付费,需要科学上网

文档:https://platform.openai.com/docs/guides/text-to-speech

4 百度 tts

配置环境

$ pip install aip-baidu

运行程序

from aip import AipSpeech APP_ID = 'xxx'
API_KEY = 'xxx'
SECRET_KEY = 'xxx'  client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
manual = r'测试百度tts'if __name__ == '__main__':print('start voice process')#语速spd: 5, 语调pit: 5, 播音per: 1result = client.synthesis(manual, 'zh', 1, {'vol': 5, 'per':1,})if not isinstance(result, dict):with open('baidu.mp3', 'wb') as f:f.write(result)else:print(result)print('process end')

描述:中规中举,在国内网络环境下可用

优点:一般手机提供的 tts 效果差不多,不需要科学上网

缺点:需要付费

文档:https://console.bce.baidu.com/ai/#/ai/speech/overview/resource/getFree

5 讯飞

例程:使用官方的 Python Demo 很长,依赖库也多;还且会随着 API 更新会切换接口,就不粘在这里了。

描述:几乎是中文合成效果最好的语音合成引擎

优点:字正腔圆,效果很好;新人礼包,第一年最高 50 万次免费,每天可用几百次

缺点:这 Demo, API, 和文档真是一言难尽…… 使用方式与百度类似,但调用方式不够友好

平台:https://www.xfyun.cn/services/online_tts

文档:https://www.xfyun.cn/doc/tts/online_tts/API.html

参数说明文档:找了半天才找到

6 总结

最终我用的是 openai 的,因为也在用 openai 的其它服务,所以不需要另外申请帐号,且效果是真的好;我自己用,用量也不大,虽然需要付费,但是费用能接受。当然,如果有资源也可以自已搭建深度学习的合成服务,不过我觉得如果用得少,也没必要。

7 参考

【小沐学Python】Python实现TTS文本转语音(speech、pyttsx3、百度AI)

相关文章:

  • js监听返回当前页面的方法
  • HCIP-BGP实验3
  • Mysql中的日志系统
  • ChatGPT与文心一言:AI助手之巅的对决
  • 利用appium自动控制移动设备并提取数据
  • 从 GPT1 - GPT4 拆解
  • 【Java】JDBC的使用
  • Yaklang 中的类型和变量
  • 华南理工大学计算机23考研复试(线下)经验分享
  • PGSQL安装PostGIS扩展模块
  • 基于YOLOv8深度学习的100种中草药智能识别系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战
  • 零基础学Python(2)— 安装Python开发工具之PyCharm
  • 《Python数据分析技术栈》第01章 02 Jupyter入门(Getting started with Jupyter notebooks)
  • haiku生成随机数
  • 电脑监视软件(2024年最新电脑监控软件推荐)
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • ES6之路之模块详解
  • go append函数以及写入
  • JavaScript中的对象个人分享
  • oldjun 检测网站的经验
  • PHP的Ev教程三(Periodic watcher)
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 十年未变!安全,谁之责?(下)
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 微服务核心架构梳理
  • 原生 js 实现移动端 Touch 滑动反弹
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • ​什么是bug?bug的源头在哪里?
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (day6) 319. 灯泡开关
  • (附源码)php投票系统 毕业设计 121500
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (一)插入排序
  • (转载)利用webkit抓取动态网页和链接
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • **PHP分步表单提交思路(分页表单提交)
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .net生成的类,跨工程调用显示注释
  • .NET学习全景图
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国
  • /var/spool/postfix/maildrop 下有大量文件
  • @Builder用法
  • [ vulhub漏洞复现篇 ] Apache APISIX 默认密钥漏洞 CVE-2020-13945
  • [2021 蓝帽杯] One Pointer PHP
  • [ASP]青辰网络考试管理系统NES X3.5
  • [BROADCASTING]tensor的扩散机制
  • [BZOJ 4034][HAOI2015]T2 [树链剖分]
  • [CCIE历程]CCIE # 20604
  • [CERC2017]Cumulative Code
  • [CSS]浮动
  • [emuch.net]MatrixComputations(7-12)
  • [Excel VBA]单元格区域引用方式的小结
  • [IE编程] IE8 新增的C++开发接口
  • [IE编程] 多页面基于IE内核浏览器的代码示例