1. 使用 Espeak 和 Pico2Wave 进行文本转语音(TTS)

在本课程中,我们将使用 Raspberry Pi 自带的两种文本转语音(TTS)引擎 —— EspeakPico2Wave —— 让 Pironman 5 Pro MAX “开口说话”。

这两种引擎都非常简单,并且可以离线运行,但它们的声音效果有明显差异:

  • Espeak:非常轻量且速度快,但声音较为机械化。可以调整语速、音调和音量等参数。

  • Pico2Wave:语音听起来比 Espeak 更自然、更流畅,但可配置选项较少。

通过本实验,您可以直观地听到 语音质量功能特性 的差异。


1. 测试 Espeak

Espeak 是 Raspberry Pi OS 自带的轻量级 TTS 引擎。 虽然语音听起来比较机械,但它的可配置性很高,可以调节音量、音调、语速等参数。

运行程序

cd ~/sunfounder-voice-assistant/examples
sudo python3 tts_espeak.py
  • 您将听到 Pironman 5 Pro MAX 说:“Hello! I’m Espeak TTS.”

  • 您可以尝试在代码中修改参数,观察 ampspeedgappitch 对声音效果的影响。

代码

from sunfounder_voice_assistant.tts import Espeak

# Create Espeak TTS instance
tts = Espeak()
# Set amplitude 0-200, default 100
tts.set_amp(200)
# Set speed 80-260, default 150
tts.set_speed(150)
# Set gap 0-200, default 1
tts.set_gap(1)
# Set pitch 0-99, default 80
tts.set_pitch(80)

tts.say("Hello! I’m Espeak TTS.")

代码说明:

  • tts.set_amp() — 控制音量(0–200)。

  • tts.set_speed() — 调整语速(80–260)。

  • tts.set_gap() — 设置单词之间的停顿(0–200)。

  • tts.set_pitch() — 设置音调(0–99)。

  • tts.say() — 将文本转换为语音并播放。

💡 提示: 尝试提高音调和语速,可以让机器人听起来更活泼;降低音调和语速,则会显得更沉稳。


2. 测试 Pico2Wave

与 Espeak 相比,Pico2Wave 可以生成 更自然、更接近人声的语音。 它的使用非常简单,但灵活性较低 —— 您只能 更改语言,而无法调整音调、语速或音量。 因此,当您希望获得清晰流畅的语音效果且无需复杂配置时,Pico2Wave 是一个不错的选择。

运行程序

cd ~/sunfounder-voice-assistant/examples
sudo python3 tts_pico2wave.py
  • 您将听到 Pironman 5 Pro MAX 说:“Hello! I’m Pico2Wave TTS.”

  • 您可以尝试更改语言(例如 es-ES 表示西班牙语),听听语音效果的变化。

代码

from sunfounder_voice_assistant.tts import Pico2Wave

# Create Pico2Wave TTS instance
tts = Pico2Wave()

# Set the language
tts.set_lang('en-US')  # en-US, en-GB, de-DE, es-ES, fr-FR, it-IT

# Quick hello (sanity check)
tts.say("Hello! I'm Pico2Wave TTS.")

代码说明:

  • tts.set_lang() — 设置语音合成的输出语言。

    • en-US (默认)

    • en-GB

    • de-DE

    • es-ES

    • fr-FR

    • it-IT

  • tts.say() — 将文本转换为语音并立即播放。


故障排查

  • 运行 Espeak 或 Pico2Wave 时没有声音

    • 检查扬声器或耳机是否正确连接,并确认音量未被静音。

    • 在终端中运行以下命令进行快速测试:

      espeak "Hello world"
      pico2wave -w test.wav "Hello world" && aplay test.wav
      

    如果没有声音,则说明问题出在音频输出,而不是 Python 代码。

  • Espeak 的声音过快或过于机械

    • 尝试在代码中调整参数:

      tts.set_speed(120)   # 降低语速
      tts.set_pitch(60)    # 调整音调
      
  • 运行代码时出现 Permission denied

    • 尝试使用 sudo 运行:

      sudo python3 test_tts_espeak.py
      

对比:Espeak 与 Pico2Wave

特性

Espeak

Pico2Wave

语音质量

机械化、合成感明显

更自然、更接近人声

语言支持

默认支持英语

支持语言较少,但覆盖常见语言

可调节性

是(语速、音调等)

否(只能设置语言)

性能

非常快、资源占用低

稍慢,占用资源更多