#はじめに
GoogleHomeに google-home-notifier を使ってしゃべらせる方法は、広く使われるようになりました。ESP8266/ESP32用に@horihiroさんが「ESP8266 から Google Home に喋らせるライブラリ」を公開して下さっています。ところが、google-ttsエンジンのspeedパラメータが上手く働いてくれないようで、ちょっと遅いしゃべりになってしまいます。これは前から不満が上がっているようで、TTSエンジンを別の HOYA提供のVoideTextに替えている方が多くいらっしゃいます。またVoiceTextは話者を色々選べるので面白そうです。@horihiroさんのライブラリを使って、TTSエンジンの部分だけ VoideText に替えてみました。
#ハード
- ESP32(ESP-WROOM-32) 開発ボード。
今回も秋月電子のAE-ESP-WROOM02-DEV
#ソフト
- ArduinoIDE1.8.7
- ESP32拡張モジュール(1.0.0)
- esp8266-google-home-notifier(1.0.6)
- esp8266-google-tts
- 母艦(Windows10)
#esp8266-google-home-notifier
Arduino(ESP8266/ESP32)で GoogleHome を喋らせるライブラリを @horihiroさんが公開されています。ありがとうございます。
詳細はこちら。
(今回使用しませんが esp8266-google-tts が無いとコンパイルが通らないと思います)
#VoiceText
HOYA株式会社提供の無料で使用できるAPIを公開して下さっています。メール登録でAPIをキーを取得して使用します。
話者は、以下のような者が使えるようです。今回は 「hikari」を使ってみました。(※上記、ドキュメントより引用)
下記ソース上では以下で変えられます。
String tts_parms = "&speaker=hikari&volume=200&speed=120&format=mp3";
#実装
特に難しいことはなく、esp8266-google-home-notifier の device()/notify() メソッドを呼ばずに、boolean play(const char *mp3Url) を使います。
面倒なのは、「VoiceText Web API」はPOST要求のみなので、play() に 「VoiceText Web API」の URLを直接渡すことができません。なので、「VoiceText Web API」のPOST要求応答を 一旦 SPIFFS に保存して、ESP32にWebServerを立てて、
play("http://ESP32アドレス/test.mp3")
のように渡しました。ちょーめんどい。SPIFFS に入れずにメモリ上でも良かったんですが。
下記ソースをコンパイル&アップし接続に成功すると、「♪ディロン♪開始します♪」。
以下のようなパラメータで好きな言葉を話してくれます。
http://ESP32アドレス/voice?text=始めましてこんばんみ
もっとちゃんとパラメータ設定できるよにすれば良かったんですがサンプルなのでヤメました。(話者とか)
#ソース
こちらにソースを置いておきます。
https://github.com/nori-dev-akg/esp32-google-home-notifier-voicetext
ESP8266でも動くと思います。ヘッダファイルを変更してください。
#SpecialThanks!!
ESP8266 から Google Home に喋らせるライブラリ
VoiceText Web API