在 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)

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

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

相关文章

Python项目——搞怪小程序(PySide6+Pyinstaller)

1、介绍 使用python编写一个小程序,回答你是猪吗。 点击“是”提交,弹窗并退出。 点击“不是”提交,等待5秒,重新选择。 并且隐藏了关闭按钮。 2、实现 新建一个项目。 2.1、设计UI 使用Qt designer设计一个UI界面&#xff0c…

C#,入门教程(20)——列表(List)的基础知识

上一篇: C#,入门教程(19)——循环语句(for,while,foreach)的基础知识https://blog.csdn.net/beijinghorn/article/details/124060844 List顾名思义就是数据列表,区别于数据数组(arr…

redis复制和分区:主从复制、哨兵模式和集群模式

概述 在 Redis 中,复制和分区是用于数据冗余和性能扩展的关键特性。以下是主从复制、哨兵模式和集群模式的工作原理的简要概述: 主从复制 (Replication) 基本概念:Redis 的主从复制功能允许多个 Redis 服务器具有相同的数据副本。这在读取操…

WGAN损失函数解读

WGAN是Wasserstein GAN 解读

【大数据Hive】hive 行列转换使用详解

目录 一、前言 二、使用场景介绍 2.1 使用场景1 2.2 使用场景2 三、多行转多列 3.1 case when 函数 语法一 语法二 操作演示 3.2 多行转多列操作演示 四、多行转单列 4.1 concat函数 语法 4.2 concat_ws函数 语法 4.3 collect_list函数 语法 4.4 collect_set函…

《设计模式的艺术》笔记 - 命令模式

介绍 命令模式将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是一种对象行为模式,其别名为动作模式或事务模式。 实现 myclass.h // // Created by …

数据预处理 matlab 数据质量评估

知乎 数据类型转换等 Mathworks 数据预处理 概念辨析 配对是同一批样本的前后比较,独立是两批不同样本的的比较 独立样本是指我们得到的样本是相互独立的。配对样本就是一个样本中的数据与另一个样本中的数据相对应的两个样本。配对样本可以消除由于样本指定的不公…

dpwwn:02

靶场下载地址 https://download.vulnhub.com/dpwwn/dpwwn-02.zip 环境配置 当打开此虚拟机环境的时候,可能会出现:当前硬件版本不支持设备“sata”。然后启动失败的情况~ 解决办法参考:https://www.cnblogs.com/yaodun55/p/16434468.html …

x-cmd pkg | fanyi - 命令行中英文翻译工具

目录 简介首次用户功能特点竞品和相关作品进一步探索 简介 fanyi 是命令行翻译工具,翻译数据来源于 icba.com 和 fanyi.youdao.com,仅支持中英文互译。支持 ChatGPT,可通过设置 OpenAI API 密钥以启用 ChatGPT 翻译。 注意:在 L…

QT上位机开发(动态数据采集与监控)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 上位机开发中,有一种类型的应用软件很特殊,它几乎没有什么交互操作,主要的工作就是检测和显示。如果说在此基础上有什么扩展的话,可能就是安全监控和报警。所以,这个上位机软件…

Flink SQL

Flink SQL 来源:B站尚硅谷 sql-client准备 Table API和SQL是最上层的API,在Flink中这两种API被集成在一起,SQL执行的对象也是Flink中的表(Table),所以我们一般会认为它们是一体的。Flink是批流统一的处理…

银河麒麟V10安装mysql5.7

本文介绍如何在银河麒麟高级服务器操作系统下安装 Mysql 数据库 1.适配系统版本 适用系统:V10(SP1) 适用架构:X86、AARCH64、LOONGARCH64 其他版本和架构可作参考 2.安装说明 X86 和 AARCH 架构的源中自带 Mysql 安装包,所以可以下载对…

本地运行LlaMA 2的简易指南

大家好,像LLaMA 2这样的新开源模型已经变得相当先进,并且可以免费使用。可以在商业上使用它们,也可以根据自己的数据进行微调,以开发专业版本。凭借其易用性,现在可以在自己的设备上本地运行它们。 本文将介绍如何下载…

@RequestBody注解基础

RequestBody RequestBody注解一般与post方法使用。 一个请求中只能存在一个RequestBody注解。 RequestBody 用于接收前端传递给后端的json字符串中的数据。(处理json格式的数据) 语法格式: ​(RequestBody Map map) (RequestBody Object obje…

numpy数组的max、min、argmax和argmin计算方法

numpy数组的max、min、argmax和argmin计算方法 官方对numpy.max和numpy.min的说明 numpy.max 参考官方的理解 数组: 24611529 import numpy as npif __name__ __main__:a np.array([[2, 4, 6, 1], [1, 5, 2, 9]])print(a)print(np.argmax(a, axis0)) # ax…

Java医院信息管理系统

技术框架: springboot shiro layui jquery thymeleaf nginx 有需要的可以联系我。 运行环境: jdk8 mysql IntelliJ IDEA maven项目功能: 本项目是用springbootlayuishiro写的医院管理系统,系统的业务比较复杂&#x…

11 - PXC集群|MySQL存储引擎

PXC集群|MySQL存储引擎 数据库系列文章PXC集群配置集群测试集群 MySQL存储引擎存储引擎介绍mysql服务体系结构mysql服务的工作过程处理查询访问的工作过程处理存储insert访问的工作过程 什么是搜索引擎 存储引擎管理查看存储引擎修改存储引擎 存储引擎特点myisam存储…

canvas能压缩图片?

之前写过一篇使用命令行工具压缩图片的博文:使用yx-tiny命令行工具进行图片压缩,大家感兴趣可以去瞅一眼。 这篇简单说一下使用canvas压缩图片 其实思路很简单,我们选择了图片之后,会获取到对应的文件流对象,然后我们…

jvm复习,深入理解java虚拟机一:运行时数据区域

程序计数器(Program Counter Register) 它是程序控制流的指示器,简单来说,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器 Java虚拟机栈(Java Virtual Machine Stack&#xf…

【LeetCode每日一题】2809. 使数组和小于等于 x 的最少时间

2024-1-19 文章目录 [2809. 使数组和小于等于 x 的最少时间](https://leetcode.cn/problems/minimum-time-to-make-array-sum-at-most-x/)思路: 2809. 使数组和小于等于 x 的最少时间 思路: 获取两个列表的长度n,并初始化一个二维数组f&…