3. 文字转语音与音效

在此示例中,我们将使用 PiCar-X(更准确地说是 Robot HAT)的音效功能。 它包含三个部分:音乐、音效、文字转语音。

安装 i2samp

在使用文字转语音(TTS)和音效功能之前,请先激活扬声器以便使其启用并可以发声。

运行 picar-x 文件夹中的 i2samp.sh 脚本,安装使用 i2s 放大器所需的一切。

cd ~/picar-x
sudo bash i2samp.sh
../_images/tt_bash.png

执行过程中会有多个确认提示,请全部选择 Y。更改应用于 Raspberry Pi 系统后,需要重新启动计算机才能生效。

重启后,再次运行 i2samp.sh 脚本测试放大器。如果扬声器成功播放声音,配置即完成。

运行代码

cd ~/picar-x/example
sudo python3 3.tts_example.py

代码运行后,请根据终端打印的提示操作。

按下键盘按键以调用功能:

  • 空格键: 播放音效(汽车喇叭)

  • c: 使用线程播放音效

  • t: 文本语音播报(说“Hello”)

  • q: 播放/停止音乐

代码

from time import sleep
from robot_hat import Music,TTS
import readchar

music = Music()
tts = TTS()

manual = '''
Input key to call the function!
    space: Play sound effect (Car horn)
    c: Play sound effect with threads
    t: Text to speak
    q: Play/Stop Music
'''

def main():
    print(manual)

    flag_bgm = False
    music.music_set_volume(20)
    tts.lang("en-US")


    while True:
        key = readchar.readkey()
        key = key.lower()
        if key == "q":
            flag_bgm = not flag_bgm
            if flag_bgm is True:
                music.music_play('../musics/slow-trail-Ahjay_Stelino.mp3')
            else:
                music.music_stop()

        elif key == readchar.key.SPACE:
            music.sound_play('../sounds/car-double-horn.wav')
            sleep(0.05)

        elif key == "c":
            music.sound_play_threading('../sounds/car-double-horn.wav')
            sleep(0.05)

        elif key == "t":
            words = "Hello"
            tts.say(words)

if __name__ == "__main__":
    main()

工作原理

与背景音乐相关的功能包括:

  • music = Music():声明对象。

  • music.music_set_volume(20):设置音量,范围为 0~100。

  • music.music_play('../musics/slow-trail-Ahjay_Stelino.mp3'):播放音乐文件,此处为路径 ../musics 下的 slow-trail-Ahjay_Stelino.mp3 文件。

  • music.music_stop():停止播放背景音乐。

备注

您可以通过 Filezilla 软件 将不同的音效或音乐添加到 musics 或 sounds 文件夹中。

与音效相关的功能包括:

  • music = Music()

  • music.sound_play('../sounds/car-double-horn.wav'):播放音效文件。

  • music.sound_play_threading('../sounds/car-double-horn.wav'):以线程模式播放音效文件,不会阻塞主线程。

文字转语音功能使用了 eSpeak 软件。

在 robot_hat 中导入 TTS 模块,该模块封装了将文字转换为语音的功能。

与文字转语音相关的功能包括:

  • tts = TTS()

  • tts.say(words):语音播报文本。

  • tts.lang("en-US"):设置语言。

备注

可以通过设置 lang("") 参数指定语言,支持以下字符:

Language

zh-CN

普通话(中文)

en-US

美国英语

en-GB

英国英语

de-DE

德语

es-ES

西班牙语

fr-FR

法语

it-IT

意大利语