python语言实现语音合成(文字转语音)

python语言实现语音合成(文字转语音)

在Python中实现文本到语音——语音朗读功能,可以使用pyttsx3库。pyttsx3库的安装和使用也相对简单,但在控制语音的暂停、继续和停止功能方面可能存在一定的困难。

首先,您需要安装pyttsx3库(如果您还没有安装的话):

pip install pyttsx3

如果你的电脑上安装了多个Python版本,你可以为特定版本的Python安装模块(库、包),还可以使用国内的镜像加快安装速度。例如我的电脑中安装了多个Python版本,要在Python 3.10版本中安装,并使用清华的镜像,cmd命令行中,输入如下命令:

py -3.10 -m pip install pyttsx3 -i https://pypi.tuna.tsinghua.edu.cn/simple

先看一个简单的文本界面的例子

import pyttsx3

# 初始化TTS引擎
engine = pyttsx3.init()

# 设置属性,例如语速和音量
engine.setProperty('rate', 150)  # 语速,可以设置为您想要的值
engine.setProperty('volume', 0.9)  # 音量,范围是0.0到1.0

# 获取并设置语音属性
voices = engine.getProperty('voices')
for voice in voices:
    # 检查语音对象是否有语言属性,并且列表不为空
    if voice.languages and 'zh' in voice.languages[0]:
        engine.setProperty('voice', voice.id)
        break

# 定义朗读文本的函数
def speak(text):
    engine.say(text)
    engine.runAndWait()

# 使用函数朗读文本
speak("您好,这是一个Python实现的语音朗读示例。")

# 更改语音和语言
for voice in voices:
    # 检查语音对象是否有语言属性,并且列表不为空
    if voice.languages and 'en' in voice.languages[0]:
        engine.setProperty('voice', voice.id)
        break

speak("Hello, this is an example of speech synthesis in Python.")

下面给出一个简单的图形用户界面的例

先给出效果图:

顺便提示,没有提供“暂停”、“继续”和“停止”按钮,因为使用pyttsx3 想控制语音的暂停、继续和停止功能比较困难,主要是因为 pyttsx3 的 API 设计并不直接支持这些功能。在 pyttsx3 中,语音合成通常是在引擎内部一次性完成的,而不是分段进行的。因此,pyttsx3 没有提供直接的方法来暂停或继续已经开始的合成过程。

有人说,用pyttsx3实现暂停、继续和停止功能,需要使用一些额外的策略和代码,比较复杂,这可能包括处理异步事件、控制语音合成的进度,以及处理可能出现的异常情况,我也没搞懂就不介绍了。

另外,有几个库支持文本到语音(TTS)的暂停、继续和停止功能,如:

gtts (Google Text-to-Speech):

暂停和继续功能: 支持通过调用 gtts.tts.stop() 和 gtts.tts.resume() 方法来暂停和继续朗读。

停止功能: 可以通过 gtts.tts.stop() 方法来停止朗读。

安装: pip install gtts

espeak:

暂停和继续功能: 支持通过调用 espeak.synth.pause() 和 espeak.synth.resume() 方法来暂停和继续朗读。

停止功能: 可以通过 espeak.synth.cancel() 方法来停止朗读。

安装: pip install espeak-ng(如果需要图形界面)

目前我也了解不多,就不多说了。】

源码如下:

import pyttsx3
import tkinter as tk

# 初始化TTS引擎
engine = pyttsx3.init()

# 设置属性的默认值
rate = engine.getProperty('rate')
volume = engine.getProperty('volume')
voices = engine.getProperty('voices')


# 定义朗读文本的函数
def speak():
    text = text_area.get("1.0", tk.END).strip()
    engine.say(text)
    engine.runAndWait()

# 设置语速
def set_rate(value):
    engine.setProperty('rate', int(value))

# 设置音量
def set_volume(value):
    engine.setProperty('volume', float(value))

# 设置语音
def set_voice(value):
    # 找到与所选名称对应的语音对象
    selected_voice = next((voice for voice in voices if voice.name == value), None)
    if selected_voice:
        engine.setProperty('voice', selected_voice.id)

# 创建主窗口
root = tk.Tk()
root.title("TTS GUI")
root.geometry("500x360")

# 创建文本区域
text_area = tk.Text(root, height=10, width=60)
text_area.pack()

# 创建按钮
speak_button = tk.Button(root, text="朗读", command=speak,width=6 ,relief="raised", bd=2)
speak_button.pack()

# 创建滑动条来控制语速
rate_label = tk.Label(root, text="语速")
rate_label.pack()
rate_slider = tk.Scale(root, from_=100, to=200, orient='horizontal', command=set_rate)
rate_slider.set(rate)  # 设置默认值
rate_slider.pack()

# 创建滑动条来控制音量
volume_label = tk.Label(root, text="音量")
volume_label.pack()
volume_slider = tk.Scale(root, from_=0.0, to=1.0, resolution=0.1, orient='horizontal', command=set_volume)
volume_slider.set(volume)  # 设置默认值
volume_slider.pack()

# 创建下拉菜单来选择语音
voice_label = tk.Label(root, text="选择语音")
voice_label.pack()
voice_var = tk.StringVar(root)
voice_var.set(voices[0].name)  # 设置默认值
voice_dropdown = tk.OptionMenu(root, voice_var, *[voice.name for voice in voices], command=set_voice)
voice_dropdown.pack()

# 运行主循环
root.mainloop()

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

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

相关文章

北航计算机软件技术基础课程作业笔记【4】

题目&#xff08;好像以前没加&#xff09; 二叉树与哈希表 作业 1.二叉树前序遍历结果 二叉树结构为 代码实现中序后序推理前序表达式 #include <iostream> #include <stack> #include <string> #include <vector> #include <deque> ​ // …

H800算力低至5.99元/卡时!抢鲜体验LLaMA3最佳实践就在潞晨云

由Meta发布的LLaMA3 8B和LLaMA3 70B的&#xff0c;将开源AI大模型推向新的高度。在多个基准测试上的表现均大幅超过已有竞品&#xff0c;成为AI应用的最新优选。 潞晨云现已上架 LLaMA3 8B和LLaMA3 70B从推理到微调和预训练的实践教程。 提供免费测试代金券&#xff0c;限时特…

yolov8 区域多类别计数

yolov8 区域多类别计数 1. 基础2. 计数功能2.1 计数模块2.2 判断模块 3. 初始代码4. 实验结果5. 完整代码6. 源码 1. 基础 本项目是在 WindowsYOLOV8环境配置 的基础上实现的&#xff0c;测距原理可见上边文章 2. 计数功能 2.1 计数模块 在指定区域内计数模块 region_point…

附近商户-GEO数据结构的基本用法

10、附近商户 10.1、附近商户-GEO数据结构的基本用法 GEO就是Geolocation的简写形式&#xff0c;代表地理坐标。Redis在3.2版本中加入了对GEO的支持&#xff0c;允许存储地理坐标信息&#xff0c;帮助我们根据经纬度来检索数据。常见的命令有&#xff1a; GEOADD&#xff1a…

Docker的介绍及应用

1.什么是Docker 我们在部署大型项目的时候&#xff0c;肯定会遇到这种问题&#xff0c;大学项目组件较多&#xff0c;运行环境复杂&#xff0c;部署时会碰到一些问题&#xff1a;例如node、redis、mysql等这些应用都有自己的依赖和函数库。这种复杂的依赖关系很容易出现兼容问…

【GitHub】github学生认证,使用copilot教程

github学生认证并使用copilot教程 写在最前面一.注册github账号1.1、注册1.2、完善你的profile 二、Github 学生认证 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光&#xff0c;感谢你的陪伴与支持 ~ &#x1f680; 欢迎一起踏上探险之旅&a…

Python PyTorch 获取 MNIST 数据

Python PyTorch 获取 MNIST 数据 1 PyTorch 获取 MNIST 数据2 PyTorch 保存 MNIST 数据3 PyTorch 显示 MNIST 数据 1 PyTorch 获取 MNIST 数据 import torch import numpy as np import matplotlib.pyplot as plt # type: ignore from torchvision import datasets, transform…

如何修复U盘在Windows 10上断开又重新连接的问题?这里有方法

序言 有时,当你把U盘连接到电脑上时,U盘每隔几秒钟就会断开连接并重新连接,这导致你无法正常复制和传输文件,这真的很烦人。硬件或驱动程序可能有问题。 在这种情况下,你需要确保此U盘与其他计算机是否正常工作。如果是,则表示你的驱动器没有问题。如果不是,不要担心。…

基于RK3588的全国产鸿蒙边缘计算工控机在智能交通ETC收费系统的应用

1.1 产品简介 基于智能交通、工业互联等行业快速智能化发展的需求&#xff0c;以 OpenHarmony 为框架开发嵌入 HamonyOS&#xff0c;打造了具有高智能、高可靠、高安全的自主 可控的边缘处理器 XM-RK3588。 图 1-1 边缘处理器 HamonyOS强化 IoT 互联互动能力&#xff0c;让边缘…

Java-Collection集合极其遍历

Collection是Java中的一种单列集合&#xff0c;即每次添加只能添加一个元素。它是单列集合的祖宗接口&#xff0c;其功能是全部单列集合都可以使用的 常用方法&#xff1a; public boolean add(E e) 将特定对象添加到当前集合中public void clear() 清空集合public boolean r…

SWOT分析法:知彼知己的战略规划工具

文章目录 一、什么是SWOT分析法二、SWOT分析法如何产生的三、SWOT分析法适合哪些人四、SWOT分析法的应用场景五、SWOT分析法的优缺点六、SWOT分析实例 一、什么是SWOT分析法 SWOT分析法是一种用于评估组织、项目、个人或任何其他事物的战略规划工具。SWOT是Strengths&#xff…

我们该如何看待AIGC(人工智能)

目录 AIGC的概述&#xff1a; AIGC的发展经历&#xff1a; AIGC的概述&#xff1a; [TOC]( &#x1f680;文章目录) ---AIGC全称为AI-Generated Content&#xff0c;指基于生成对抗网络GAN、大型预训练模型等人工智能技术&#xff0c;通过已有数据寻找规律&#xff0c;并通过…

智能化安全防护:AI防火墙的原理与应用

随着人工智能技术的迅猛发展&#xff0c;其在各个领域的应用也日益广泛。作为引领数字化转型的重要力量&#xff0c;AI技术为我们的生活和工作带来了前所未有的便利与效率。在通信领域&#xff0c;人工智能的应用同样展现出了巨大的潜力和价值&#xff0c;特别是在网络安全防护…

vCenter 物理配置与虚拟机配置对应关系

目录 背景现状概念存储池物理与虚拟资源分配及使用情况汇总 分配cpu内存硬盘VSAN、VM Encryption和VVOL No Requirements厚置备和精简置备 总结cpu内存硬盘建议 背景 现在有三台服务器&#xff0c;需要统计上面所有服务占用的资源情况与总和&#xff0c;目的是看还有多少资源可…

Pandas数据分析小技巧

Pandas数据分析小技巧&#xff1a;提升数据处理效率与准确性的秘诀 Pandas是一个强大的Python数据分析库&#xff0c;它提供了快速、灵活且富有表现力的数据结构&#xff0c;使得数据清洗、转换、分析等操作变得简单而高效。本文将介绍一些Pandas数据分析的小技巧&#xff0c;…

【Linux】谈谈shell外壳是什么?

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

火车头采集怎么发布到Wordpress

火车头采集怎么快速发布到Wordpress系统&#xff0c;可以按照以下步骤操作&#xff1a; 目录 1. Wordpress火车头采集发布模块 2. 发布模块内容参数映射&#xff0c;火车头采集发布数据到Wordpress 3. 简数采集一键发布到Wordpress方法 1. Wordpress火车头采集发布模块 如…

主成分分析PCA原理以及特征

一、PCA原理 原始数据 x ∈ R N x\in R^N x∈RN&#xff0c;经过PCA投影后的数据 y A x &#xff0c; y ∈ R P yAx&#xff0c;y\in R^P yAx&#xff0c;y∈RP 其中&#xff0c; A ∈ R P N A\in R^{P\times N} A∈RPN 二、PCA特征 1、降低数据的维度 2、提取数据的特征…

链表的回文结构(画图精讲)

题目的讲解 解决思路 1&#xff0c;先找中间节点 2&#xff0c;然会进行逆置 3&#xff0c;最后进行对比 1&#xff0c;找到中间节点 这个我们采取快慢指针&#xff0c;来找到中间节点 快慢指针是一种常用的技巧&#xff0c;用于在链表或数组中找到中间节点、检测循环或者解决其…