.. note::
こんにちは、SunFounder Raspberry Pi & Arduino & ESP32 愛好者コミュニティへようこそ! Raspberry Pi、Arduino、ESP32 について、他の愛好者と一緒に深く掘り下げて学びましょう。
**参加する理由は?**
- **専門的なサポート**: 購入後の問題や技術的な課題を、コミュニティやチームの助けを借りて解決できます。
- **学びと共有**: スキルを高めるためのヒントやチュートリアルを交換しましょう。
- **限定プレビュー**: 新しい製品発表や先行プレビューに早期アクセスできます。
- **特別割引**: 最新製品に対する独占的な割引を楽しめます。
- **祝典プロモーションとプレゼント**: プレゼントキャンペーンや季節ごとのプロモーションに参加できます。
👉 私たちと一緒に探求し、創造する準備はできましたか? [|link_sf_facebook|] をクリックして、今すぐ参加しましょう!
.. _py_tts:
16. TTS (音声合成)
==============================================
この例では、TTS (音声合成) モジュールを使って PiCrawler を話させる方法を示します。
2 つのエンジンをサポートしています:**Piper** (高品質なニューラル TTS) と
**Espeak** (軽量な従来型 TTS) です。任意のテキストを入力すると、ロボットが
それを読み上げます。
**コードの実行**
.. raw:: html
.. code-block::
cd ~/picrawler/examples
sudo python3 16_tts.py
プログラムを実行すると、エンジンの種類とモデルが表示されます。任意の
文章を入力して **Enter** を押すと — ロボットがそれを話します。
``quit`` と入力して終了するか、**Ctrl+C** を押します。
**コード**
.. note::
以下のコードを **変更/リセット/コピー/実行/停止** できます。ただし、その前に
``picrawler\examples`` のようなソースコードのパスに移動する必要があります。
コードを変更した後、直接実行して効果を確認できます。
.. raw:: html
.. code-block:: python
#!/usr/bin/env python3
from robot_hat.tts import Piper, Espeak
# robot_hat TTS モジュールを使用した音声合成デモ
# Ctrl+C で終了します
# USE_PIPER=True で高品質ニューラル TTS (Piper)、False で Espeak
USE_PIPER = True
# Piper モデル: "en_US-ryan-low" (英語), "zh_CN-huayan-x_low" (中国語)
TTS_MODEL = "en_US-ryan-low"
def main():
print("=== PiCrawler 音声合成デモ ===")
if USE_PIPER:
print(f"エンジン: Piper ({TTS_MODEL})")
tts = Piper(model=TTS_MODEL)
else:
print("エンジン: Espeak")
tts = Espeak()
print("話すテキストを入力してください。'quit' で終了します")
print()
try:
while True:
text = input("話すテキスト: ").strip()
if text.lower() == 'quit':
break
if text:
print(f"再生中: {text}")
tts.say(text)
except KeyboardInterrupt:
print("\n終了中...")
if __name__ == "__main__":
main()
**仕組み**
#. 2 つの TTS エンジンが利用可能
.. code-block:: python
from robot_hat.tts import Piper, Espeak
``robot_hat`` パッケージは 2 つの TTS エンジンを提供します:
- **Piper**: ニューラルネットワークベースのエンジンで、自然で高品質な
音声を生成します。音声モデルファイルが必要です。
- **Espeak**: 軽量でルールベースのエンジンで、最小限のリソースで動作します。
#. エンジンとモデルの選択
.. code-block:: python
USE_PIPER = True
TTS_MODEL = "en_US-ryan-low"
``USE_PIPER`` を ``True`` にすると Piper、``False`` にすると Espeak を
使用します。Piper を使用する場合、``TTS_MODEL`` で音声を選択します。
一般的なモデルは以下の通りです:
- ``"en_US-ryan-low"`` — アメリカ英語の男性音声
- ``"zh_CN-huayan-x_low"`` — 中国語の女性音声
#. TTS インスタンスの作成
.. code-block:: python
if USE_PIPER:
tts = Piper(model=TTS_MODEL)
else:
tts = Espeak()
``USE_PIPER`` フラグに基づいて、適切なエンジンがインスタンス化されます。
両方のエンジンは同じ ``say()`` インターフェースを共有しているため、
エンジンを切り替えても他のコードを変更する必要はありません。
#. 入力ループ
.. code-block:: python
while True:
text = input("話すテキスト: ").strip()
if text.lower() == 'quit':
break
if text:
print(f"再生中: {text}")
tts.say(text)
プログラムはテキストの入力を求めます:
- 任意の文章を入力して **Enter** を押すと、ロボットが話します。
- ``quit`` と入力してループを終了します。
- いつでも **Ctrl+C** で中断できます。
#. STT との対比
このレッスンは :ref:`py_stt` の対になるものです。STT (音声認識) と
TTS (音声合成) が組み合わさって、PiCrawler の音声インターフェースの
入力と出力の両方を形成します。