rch850 の上澄み

技術的な話題とか、雑談とか。タイトルを上澄みに変えました @ 2020/09/02

M5StackからAITalkを呼び出してしゃべらせる

引き続き M5Stack ネタです。

先日の MA 作業回で AITalk Web API を試用させてもらえることになったし、せっかくだから M5Stack にしゃべらせてみるかーということで、やってみました。

あっさり簡単そうに書きましたけど、そこそこつまづきながら、なんとかしゃべらせるところまでたどり着きました。

  • M5Stack のサンプルには PlayMP3FronSDToDAC など、ストレージからの読み出ししかなく、HTTP 経由で取得するサンプルが見当たらない。
  • StreamMP3FromHTTP がそれっぽいと思いきや、微妙に違っていて、それが分からずしばらく詰まる。
    • このサンプルが使っているのは AudioFileSourceICYStream だが、これはストリーミング再生用らしく、普通に MP3 を取得するなら AudioFileSourceHTTPStream を使う。
    • このサンプルが使っているのは AudioOutputI2SNoDAC だが、M5Stack では AudioOutputI2S を使う。使い方は PlayMP3... のサンプルのほうにある。
  • この違いに気づかずに、さては MP3 がだめで AAC なら行けるのかと勘違いし、余計に迷い込んでしまう。違いに気づいて直してもうまく再生されなくて、もしかして MP3 に戻せばいいのかと試してみたら再生された。

ソースはこちら: M5Stack-sandbox/AITalk.ino at master · rch850/M5Stack-sandbox

ちなみにテキスト表示をセンタリングするのに M5.Lcd.setTextDatum(MC_DATUM) を使ってます。これを見つけるまでの流れは

  • M5.Lcd で使えるいい感じの関数を探しに M5Stack.h を眺める
  • LcdM5Display クラスとなっているので M5Display.h を眺める
  • M5Display クラスは TFT_eSPI クラスを継承しているので In_eSPI を眺める
  • drawCentreString という気になる名前の関数が見つかったが Deprecated, use setTextDatum() and drawString() と書かれている

という流れで、setTextDatum でセンタリングできそうだという事が分かったわけです。他にも M5.Lcd で使える色々な関数が In_eSPI にあったので、どんどん使っていきたいところです。