M5StackからAITalkを呼び出してしゃべらせる
引き続き M5Stack ネタです。
先日の MA 作業回で AITalk Web API を試用させてもらえることになったし、せっかくだから M5Stack にしゃべらせてみるかーということで、やってみました。
M5Stack から AITalk 呼び出してしゃべってもらった。
— りちゃ (@rch850) October 18, 2018
AITalk は #MA_2018 で試用させてもらってるもので MP3 を取得。 pic.twitter.com/aZIElA8fCJ
あっさり簡単そうに書きましたけど、そこそこつまづきながら、なんとかしゃべらせるところまでたどり着きました。
- 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 を眺めるLcd
はM5Display
クラスとなっているので M5Display.h を眺めるM5Display
クラスはTFT_eSPI
クラスを継承しているので In_eSPI を眺めるdrawCentreString
という気になる名前の関数が見つかったがDeprecated, use setTextDatum() and drawString()
と書かれている
という流れで、setTextDatum
でセンタリングできそうだという事が分かったわけです。他にも M5.Lcd
で使える色々な関数が In_eSPI にあったので、どんどん使っていきたいところです。