M5Stickをしゃべらせてみよう

  • URLをコピーしました!

前回、マイコンモジュールM5Stackを購入したことを記事にしました。今回はこのM5Stackを活用しておしゃべりロボットのようなものを作ってみようと思います。

前回購入したM5Stackについては以下の記事をご覧ください。

目次

M5Stackをしゃべらせる

今回M5Stackを使ったおしゃべりロボットを作成するにあたり、Avaterというディスプレイに顔のグラフィックを表示させるアプリケーションと、音声合成サービスVoiceText Web APIを使用します。
全て1から開発するのは大変なので、robo8080さんの「M5Core2_Avatar_VoiceText_TTS」のリポジトリを使わせて頂くことにします。

GitHubからリポジトリをダウンロードしてください。

VoiceText Web APIに登録する

今回、Aveterがしゃべる際に発する音声を作成するために、VoiceText Web APIという音声合成してくれるWebサービスを使用します。
このWebサービスを利用することで、テキストデータから音声データを生成することができます。

以下のページにアクセスしてユーザー登録をしてください。(登録は無料です)

ユーザー登録が完了すると、APIを使用するためのキーをもらうことができます。

M5Stack-Avatarをインストール

M5Stack AvaterはM5Stackのディスプレイに顔を表示させることができるアプリケーションです。プログラムから表情を変化させたり、吹き出しを表示してしゃべらせることができます。
Avaterを使うことでM5Stackをロボットのように見せることができます。

こちらはバージョン0.7.3をダウンロードしてください。

ESP8266Audioをインストール

ESP8266Audioは、WAV、MP3、MIDIなどのオーディオファイルを再生するためのライブラリです。VoiceText Web APIで合成した音声データをM5Stackから出力するために必要になります。

こちらはバージョン1.9.3をダウンロードしてください。

ソースコードの修正

さて、ここからは「M5Core2_Avatar_VoiceText_TTS」のプロジェクトファイル内のソースコードを変更していきます。

Avatar.cpp

Arduino IDEのファイル->環境設定の「スケッチブックの保存場所」のパスにある「libraries」フォルダ内を「Avatar.cpp」というファイル名で検索をかけてください。
ファイルが見つかったらエディタで開き、以下の箇所を修正します。

「init()」関数(96行目~123行目)で実行されている「xTaskCreate」、「xTaskCreate」、「xTaskCreate」の3つの関数の第3引数を「512」→「1024」と変更します。

void Avatar::init() {
  DriveContext *ctx = new DriveContext(this);
  // TODO(meganetaaan): keep handle of these tasks
  xTaskCreate(drawLoop,     /* Function to implement the task */
                          "drawLoop",   /* Name of the task */
                          2048,         /* Stack size in words */
                          ctx,          /* Task input parameter */
                          1,            /* Priority of the task */
                          NULL);        /* Task handle. */
  xTaskCreate(saccade,      /* Function to implement the task */
                          "saccade",    /* Name of the task */
                          1024,         /* Stack size in words */
                          ctx,          /* Task input parameter */
                          2,            /* Priority of the task */
                          NULL);        /* Task handle. */
  xTaskCreate(updateBreath, /* Function to implement the task */
                          "breath",     /* Name of the task */
                          1024,         /* Stack size in words */
                          ctx,          /* Task input parameter */
                          2,            /* Priority of the task */
                          NULL);        /* Task handle. */
  xTaskCreate(blink,        /* Function to implement the task */
                          "blink",      /* Name of the task */
                          1024,         /* Stack size in words */
                          ctx,          /* Task input parameter */
                          2,            /* Priority of the task */
                          NULL);        /* Task handle. */
}

このソースのように修正されていれば完了です。

M5Core2_Avatar_VoiceText_TTS.ino

M5Core2_Avatar_VoiceText_TTSのリポジトリ内にあるファイル、「M5Core2_Avatar_VoiceText_TTS.ino」の17、18行目にあるwifiのSSIDとパスワードをお使いのルーターのものに書き換えてください。

const char *SSID = "YOUR_WIFI_SSID";
const char *PASSWORD = "YOUR_WIFI_PASSWORD";

AudioFileSourceVoiceTextStream.cpp

上記「M5Core2_Avatar_VoiceText_TTS.ino」と同じディレクトリにある「AudioFileSourceVoiceTextStream.cpp」についても修正を行います。

30行目の以下の部分を修正します。

const String tts_user = "YOUR_TSS_API_KEY"; // set your id

「YOUR_TSS_API_KEY」の部分を、先ほどVoiceText Web APIに登録した際に発行されたAPIキーに変更してください。

コンパイルしてみる

実際にコンパイルしてみると、私の環境では以下のようなエラーが発生しました。

\libraries\ESP8266Audio-1.9.3\src\libtinysoundfont/tsf.h: In function 'void tsf_channel_midi_control(tsf*, int, int, int)':
tsf.h:2100:1: error: insn does not satisfy its constraints:tsf.h:2100:1: internal compiler error: in extract_constrain_insn, at recog.c:2210

調べてみるとESP8266Audioライブラリに含まれる「tsf.h」というファイルのバグのようです。
以下のような方法でコンパイルエラーを解消することができました。

ボードマネージャーのバージョンを変更する

ボードマネージャーのバージョンによってもエラーがでるようです。今回のv2.0.2はNGでした。
v2.0.0にバージョンを下げるとエラーが解消されます。

ボードマネージャーについては紅樹 タカオさんが以下のページでまとめてくれていますので、ぜひご覧ください。

tsf.hをバグ修正版に置き換える

もう1つの方法はコンパイルエラーの原因になっているtsf.hを修正されたファイルに置き換えです。以下のページにバグが修正された「tsf.h」のソースがあります。「libraries」フォルダ内を「tsf.h」で検索し、見つかったファイルを置き換えてください。

M5Stackに書き込み実行する

コンパイルエラーが解消されたらM5Stackに書き込みます。
以下のように動作させることができました。

プログラムを変更することでセリフを変えることができます。

まとめ

今回はM5Stackをしゃべらせるアプリケーションを構築してみました。音声合成が可能なクラウドサービスを使用するというIoTシステムを作成することができました。
ただ、ライブラリやハードウェアのバージョンの整合によるエラーは付きまといそうかなという気がしています。

それでは、また次の記事でお会いしましょう。

おすすめの記事

よかったらシェアしてね!
  • URLをコピーしました!
目次