11 文字转语音 (TTS)

来自Waveshare Wiki
跳转至: 导航搜索

文字转语音(TTS)

由于安全方面的原因,你并不能通过 JupyterLab 来直接访问音频设备(环境的限制),我们这里的代码块不供用户运行。

这里的程序来自于产品主程序的 audio_ctrl.py,你可以参考这里的代码来了解产品主程序是如何执行文字转语音功能的。

import pyttsx3  # 导入 pyttsx3 库,用于文本转语音功能
import threading  # 导入 threading 模块,用于创建线程

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

# 创建事件对象,用于控制语音播放的同步
play_audio_event = threading.Event()

# 设置引擎属性,这里设置的是语音播放的速度,数值越大语速越快
engine.setProperty('rate', 180)

# 定义函数,用于播放指定文本的语音
def play_speech(input_text):
    engine.say(input_text)  # 将文本输入到引擎中
    engine.runAndWait()  # 等待语音输出完成
    play_audio_event.clear()  # 清除事件,表示语音播放完成

# 定义函数,用于在新线程中播放语音
def play_speech_thread(input_text):
    if play_audio_event.is_set():  # 如果已经有语音在播放中,则直接返回,不重复播放
        return
    play_audio_event.set()  # 设置事件,表示有新的语音播放任务开始
    # 创建新线程,调用 play_speech 函数来播放语音
    speech_thread = threading.Thread(target=play_speech, args=(input_text,))
    speech_thread.start()  # 启动新线程,开始播放语音

这段代码使用了 pyttsx3 库来实现文本转语音的功能,并使用 threading 模块创建了一个线程来异步播放语音。play_speech() 函数用于在主线程中播放指定文本的语音,而 play_speech_thread() 函数用于在新线程中播放语音,以避免阻塞主线程。同时,通过 play_audio_event 控制语音播放的同步,确保同一时间只有一个语音在播放。