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

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习&实践爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值