当前位置:   article > 正文

利用Python的Pyttsx3库实现离线文字转语音(TTS)功能

pyttsx3

项目中需要一个语言模块,之前用微软的TTS其实挺好用的,但是不开源,离线也不好整,打算找个轻量化的,然后发现,Python里Pyttsx3库已经能完美实现我的需求了

Pyttsx3

Pyttsx3是一个Python库,用于将文本转换成语音。它是跨平台的,可以在Windows、MacOS和Linux上运行。Pyttsx3实际上是一个文本到语音转换(TTS)的接口,背后支持使用系统内置的语音引擎,比如Windows上的SAPI5、MacOS上的NSSpeechSynthesizer,以及Linux上的espeak。

使用pyttsx3,你可以控制语音的速度、音量和语调,并且可以选择不同的语音(如果系统支持的话)。这个库不依赖于互联网连接,因此非常适合需要在没有网络环境下使用语音功能的应用。

示例

这里有一个基本的使用pyttsx3的例子:

  1. import pyttsx3
  2. # 初始化引擎
  3. engine = pyttsx3.init()
  4. # 设置要说的话
  5. engine.say("Hello, how are you?")
  6. # 运行
  7. engine.runAndWait()

中文的话,也是直接输进去就行

  1. import pyttsx3
  2. # 初始化引擎
  3. engine = pyttsx3.init()
  4. # 设置要说的话
  5. engine.say("你有这么高速运转的机械进入中国记住我给出的原理")
  6. # 运行
  7. engine.runAndWait()

下面搞些好玩的,比如整个GUI界面

GUI界面使用

为了实现一个具有图形用户界面的程序,其中使用 pyttsx3 库来将文本转化为语音并保存为 MP3 文件,我们可以使用 Python 的 Tkinter 库来构建 GUI。以下是一个简单的示例程序,展示了如何实现这样的功能:

  1. 创建一个窗口,其中包含两个输入框:一个用于输入文本,另一个用于输入文件名。
  2. 添加两个按钮:一个用于保存语音为 MP3 文件,另一个用于试听输入的文本。
  3. 使用 pyttsx3 来生成语音,并利用其将生成的语音保存为文件。

首先,确保你已经安装了 pyttsx3tkinter 库。如果未安装,可以通过以下命令安装:

pip install pyttsx3

tkinter 通常作为 Python 的标准库自带,不需要额外安装。

以下是代码的实现:

  1. import tkinter as tk
  2. from tkinter import simpledialog
  3. import pyttsx3
  4. import datetime
  5. import os
  6. def save_speech():
  7. text = text_entry.get("1.0", "end-1c")
  8. filename = filename_entry.get()
  9. if not filename:
  10. filename = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
  11. filename += ".mp3"
  12. engine = pyttsx3.init()
  13. engine.save_to_file(text, filename)
  14. engine.runAndWait()
  15. label_status.config(text=f"Saved as {filename}")
  16. def preview_speech():
  17. text = text_entry.get("1.0", "end-1c")
  18. engine = pyttsx3.init()
  19. engine.say(text)
  20. engine.runAndWait()
  21. root = tk.Tk()
  22. root.title("Text to Speech Converter")
  23. tk.Label(root, text="Enter Text:").pack()
  24. text_entry = tk.Text(root, height=10, width=50)
  25. text_entry.pack()
  26. tk.Label(root, text="Enter Filename (optional):").pack()
  27. filename_entry = tk.Entry(root)
  28. filename_entry.pack()
  29. save_button = tk.Button(root, text="Save to MP3", command=save_speech)
  30. save_button.pack(pady=5)
  31. preview_button = tk.Button(root, text="Preview", command=preview_speech)
  32. preview_button.pack(pady=5)
  33. label_status = tk.Label(root, text="")
  34. label_status.pack()
  35. root.mainloop()

这段代码创建了一个基本的界面,用户可以在其中输入文本和文件名。点击 "Save to MP3" 按钮将文本保存为 MP3 文件,而点击 "Preview" 按钮则可试听文本的语音输出。注意,pyttsx3save_to_file 方法可能在不同的系统和版本中行为有所不同,因此建议在开发中检查相关的库文档和兼容性问题。

进一步修改GUI

进一步的,我们可以在GUI中添加控制语速、音量和语调的选项,同时还可以提供一个下拉菜单来选择不同的语音。在下面的程序中,我将把所有界面元素的文本设置为中文,并增加调整这些语音属性的控件。

  1. import tkinter as tk
  2. from tkinter import simpledialog, ttk
  3. import pyttsx3
  4. import datetime
  5. def save_speech():
  6. text = text_entry.get("1.0", "end-1c")
  7. filename = filename_entry.get()
  8. if not filename:
  9. filename = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
  10. filename += ".mp3"
  11. engine = pyttsx3.init()
  12. engine.setProperty('rate', int(rate_entry.get()))
  13. engine.setProperty('volume', float(volume_entry.get())/100)
  14. engine.setProperty('voice', voice_var.get())
  15. engine.save_to_file(text, filename)
  16. engine.runAndWait()
  17. status_label.config(text=f"文件已保存为:{filename}")
  18. def preview_speech():
  19. text = text_entry.get("1.0", "end-1c")
  20. engine = pyttsx3.init()
  21. engine.setProperty('rate', int(rate_entry.get()))
  22. engine.setProperty('volume', float(volume_entry.get())/100)
  23. engine.setProperty('voice', voice_var.get())
  24. engine.say(text)
  25. engine.runAndWait()
  26. root = tk.Tk()
  27. root.title("文字转语音转换器")
  28. tk.Label(root, text="输入文本:").pack()
  29. text_entry = tk.Text(root, height=10, width=50)
  30. text_entry.pack()
  31. tk.Label(root, text="文件名(可选):").pack()
  32. filename_entry = tk.Entry(root)
  33. filename_entry.pack()
  34. tk.Label(root, text="语速(0-200):").pack()
  35. rate_entry = tk.Entry(root)
  36. rate_entry.insert(0, '150') # 默认语速
  37. rate_entry.pack()
  38. tk.Label(root, text="音量(0-100):").pack()
  39. volume_entry = tk.Entry(root)
  40. volume_entry.insert(0, '100') # 默认音量
  41. volume_entry.pack()
  42. tk.Label(root, text="选择语音:").pack()
  43. voice_var = tk.StringVar(root)
  44. voices_combo = ttk.Combobox(root, textvariable=voice_var, state="readonly")
  45. engine = pyttsx3.init()
  46. voices = engine.getProperty('voices')
  47. voices_combo['values'] = [voice.id for voice in voices]
  48. voices_combo.current(0)
  49. voices_combo.pack()
  50. save_button = tk.Button(root, text="保存为MP3", command=save_speech)
  51. save_button.pack(pady=5)
  52. preview_button = tk.Button(root, text="试听", command=preview_speech)
  53. preview_button.pack(pady=5)
  54. status_label = tk.Label(root, text="")
  55. status_label.pack()
  56. root.mainloop()

这个程序包含了以下功能:

  • 输入文本:用户可以输入想要转换的文本。
  • 文件名:用户可以自定义保存的文件名,默认使用当前时间戳。
  • 语速设置:用户可以通过输入一个数值(0到200)来调整语速。
  • 音量设置:用户可以调整音量,范围从0到100。
  • 选择语音:用户可以从系统支持的语音中选择一个。

这样,用户就可以根据自己的需要调整语音输出的各种属性。这些设置会在保存文件或者试听时被应用。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号