LoginSignup
8
3

More than 3 years have passed since last update.

Arduino互換機(ESP8266/ESP32)で google-home-notifier のしゃべりが遅いので替えてみた

Last updated at Posted at 2018-10-27

はじめに

GoogleHomeに google-home-notifier を使ってしゃべらせる方法は、広く使われるようになりました。ESP8266/ESP32用に@horihiroさんが「ESP8266 から Google Home に喋らせるライブラリ」を公開して下さっています。ところが、google-ttsエンジンのspeedパラメータが上手く働いてくれないようで、ちょっと遅いしゃべりになってしまいます。これは前から不満が上がっているようで、TTSエンジンを別の HOYA提供のVoideTextに替えている方が多くいらっしゃいます。またVoiceTextは話者を色々選べるので面白そうです。@horihiroさんのライブラリを使って、TTSエンジンの部分だけ VoideText に替えてみました。

ハード

ソフト

  • 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をキーを取得して使用します。

VoiceText Web 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

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3