.. note:: こんにちは!SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Communityへようこそ!Raspberry Pi、Arduino、ESP32に関心のある仲間たちと一緒に、さらに深く学んでいきましょう。 **なぜ参加するのか?** - **専門家のサポート**: 購入後の問題や技術的な課題を、コミュニティやチームのサポートを通じて解決できます。 - **学びと共有**: ヒントやチュートリアルを交換して、スキルを向上させましょう。 - **限定プレビュー**: 新製品の発表に早期アクセスし、先行して情報を得られます。 - **特別割引**: 最新の製品に対して、限定の割引を楽しむことができます。 - **祝祭プロモーションとプレゼント**: プレゼント企画や祝祭プロモーションに参加できます。 👉 私たちと一緒に探求し、創造する準備はできましたか?[|link_sf_facebook|]をクリックして、今すぐ参加しましょう! .. _py_sound: 3. 音声効果 ===================== この例では、PiCrawler(正確にはRobot HAT)の音声効果を使用します。音声効果は、 **音楽** 、 **サウンド** 、 **テキスト読み上げ** の3つの部分で構成されています。 .. .. image:: img/tts.png **i2sampのインストール** これらの機能を使用する前に、まずスピーカーを有効にして、音を出せるようにする必要があります。 ``i2samp.sh`` を実行して、このスクリプトを使ってi2sアンプを使用するために必要なすべての設定を行います。 .. raw:: html .. code-block:: cd ~/picrawler/ sudo bash i2samp.sh いくつかの確認メッセージが表示されるので、すべてのプロンプトに **Y** で答えてください。Raspberry Piの設定が変更された後、これらの変更が有効になるためには、コンピュータを再起動する必要があります。 再起動後、再度 ``i2samp.sh`` スクリプトを実行して、アンプをテストします。スピーカーから音が正常に再生されれば、設定は完了です。 **コードの実行** .. raw:: html .. code-block:: cd ~/picrawler/examples sudo python3 3_sound_effect.py プログラムが開始されると、ターミナルに操作メニューが表示されます。 キーを押すと、対応する機能がすぐに実行されます。 * ``q``:バックグラウンド音楽の再生 / 停止を切り替えます。 * ``1``:複数の効果音を順番に再生します(ブロッキングモード)。 * ``2``:同じ効果音をスレッドを使用して再生します(ノンブロッキング)。 * ``t``:テキスト読み上げ(TTS)機能を使って「Hello」と発話します。 プログラムは継続して実行され、キー入力を待機します。 Ctrl+C を押すとプログラムが停止します。 終了前に、再生中のバックグラウンド音楽は自動的に停止します。 **コード** .. code-block:: python from time import sleep import readchar from robot_hat import Music, TTS music = Music() tts = TTS() manual = ''' Press a key to trigger actions (no Enter needed): q: Play/Stop background music 1: Play sound effect (blocking) 2: Play sound effect (threading) t: Text to speak Ctrl^C: quit ''' def main(): print(manual) flag_bgm = False music.music_set_volume(20) tts.lang("en-US") try: while True: # Real-time key input (no Enter required) key = readchar.readkey().lower() if key == "q": flag_bgm = not flag_bgm if flag_bgm: music.music_play('./musics/sports-Ahjay_Stelino.mp3') else: music.music_stop() elif key == "1": music.sound_play('./sounds/talk1.wav') sleep(0.05) music.sound_play('./sounds/talk3.wav') sleep(0.05) music.sound_play('./sounds/sign.wav') sleep(0.5) elif key == "2": music.sound_play_threading('./sounds/talk1.wav') sleep(0.05) music.sound_play_threading('./sounds/talk3.wav') sleep(0.05) music.sound_play_threading('./sounds/sign.wav') sleep(0.5) elif key == "t": tts.say("Hello") except KeyboardInterrupt: print("\nquit") finally: # Stop music before exit to reduce error messages try: music.music_stop() except Exception: pass if __name__ == "__main__": main() **仕組みは?** 背景音楽に関連する機能は以下の通りです: * ``music = Music()`` : オブジェクトを宣言します。 * ``music.music_set_volume(20)`` : 音量を設定します。範囲は0~100です。 * ``music.music_play(./musics/sports-Ahjay_Stelino.mp3)`` : 音楽ファイルを再生します。ここでは、 ``./musics`` パスにある **sports-Ahjay_Stelino.mp3** ファイルを再生します。 * ``music.music_stop()`` : 背景音楽の再生を停止します。 .. note:: 異なる音楽や効果音を ``musics`` または ``sounds`` フォルダに追加できます。追加方法は:ref:`filezilla` を参照してください。 サウンドエフェクトに関連する機能は以下の通りです: * ``music = Music()`` * ``music.sound_play('./sounds/talk1.wav')`` : サウンドエフェクトファイルを再生します。ここでは、 ``./musics`` パスにある **talk1.wav** ファイルを再生します。 * ``music.sound_play_threading('./sounds/talk1.wav')`` : サウンドエフェクトファイルを新しいスレッドで再生し、メインスレッドを停止しません。 テキスト読み上げに関連する機能は以下の通りです: * ``tts = TTS()`` * ``tts.say(words)`` : テキストを音声に変換して読み上げます。 * ``tts.lang("en-US")`` : 言語を設定します。 .. note:: 言語は、 ``lang("")`` パラメータで次のような文字列を設定することで指定できます。 .. list-table:: Language :widths: 15 50 * - zh-CN - 中国語(普通話) * - en-US - 英語(アメリカ) * - en-GB - 英語(イギリス) * - de-DE - ドイツ語(Deutsch) * - es-ES - スペイン語(España) * - fr-FR - フランス語(フランス) * - it-IT - イタリア語(Italia)