ようやくM5Stackで株式会社アクエストの音声合成エンジンAquesTalkのESP32版である、AquesTalk pico for ESP32を使えたのでメモ
前々回のよくはまるポイント
前回のLDFの使い方
を学んだおかげで、比較的スムーズにできたと思う。
新規でPlatformIO Projectを作る
作成内容
[env:m5stack-core-esp32]
platform = espressif32
board = m5stack-core-esp32
framework = arduino
Project nameはM5_Aquestalk_picoとした。
AquesTalk pico for ESP32を準備する
AquesTalk pico for ESP32のダウンロード
公式のダウンロードページからAquesTalk pico for ESP32をダウンロードして解凍する。
今回利用するのは、
ヘッダファイル:aquestalk.h
スタティックライブラリ:libaquestalk.a
※aq_dic この辞書フォルダの使い方はわからなかった。ぐすん
サンプルコードの入手と分析
公式からリンクされている開発者blogを一通り読んだら、さらにそこからリンクされているサンプルコードを入手する。
https://www.a-quest.com/blog_data/esp32/hello_aquestalk.ino
このサンプルコードの冒頭の部分を読んでみると、
#include "driver/i2s.h"
#include "aquestalk.h"
i2s.hは、Framework:Arduino, platform:espressif32を選択したときに、PlatformIOがsdkとして自動でインストールしてくれるものなかに入っている。
"C:\Users\xxxxx\.platformio\packages\framework-arduinoespressif32\tools\sdk\include\driver\driver\i2s.h"
aquestalk.hは、先程ダウンロードしたヘッダファイルでこいつも同様に中をみると、stdint.hのみインクルードしているようなのでこれも当然、標準ライブラリとして使えるだろう。
以上より、今回のサンプルコードを動かすだけならば、AquesTalk pico for ESP32以外には特別なライブラリなどは不要だろう。
AquesTalk pico for ESP32のファイル類を適切な場所に設置してplatformi.iniを編集
PlatformIOのなるべくProject毎に独立した環境をつくるべきという考え方に則って(則ったつもり)設置した。
この置き方ならばLDF Modeは標準のchainのままで充分(実際はoffでもBuildできた)
-
ヘッダファイル:aquestalk.h → Project用のincludeファイル置き場へ設置
"C:\Users\xxxxx\Documents\PlatformIO\Projects\M5_Aquestalk_pico\include\aquestalk.h" -
スタティックライブラリ:libaquestalk.a → Project用のlibファイル置き場へ設置
"C:\Users\xxxxx\Documents\PlatformIO\Projects\M5_Aquestalk_pico\lib\libaquestalk.a"
スタティックライブラリをリンクするようにplatformi.iniを編集
build_flagsを加えて
-l(小文字のエル)でaquestalkというライブラリを
-Lで指定したフォルダ内を探して、ビルド時にこのスタティックライブラリlibaquestalk.a(.aなので複数オブジェクトファイル)を実行ファイルに変換する時にリンクするようにする。
[env:m5stack-core-esp32]
platform = espressif32
board = m5stack-core-esp32
framework = arduino
build_flags =
# -l[aquestalk]: Search the library named (lib)aquestalk(.a) in (-L)projectname\lib\ when linking
-laquestalk
-Llib/
※豆知識
-llibaquestalk.aでも-llibaquestalkでも-laquestalk.aでも-laquestalkでもビルドできる。ファイル名の最初の(lib)と拡張子.aは省略できるみたい。
platform.iniの編集のときに、オプションの内容を複数指定するときは半角スペース2文字以上開けること。また、コメントは横にかかないこと。 C++プログラムしている人なら当たり前のことなのかな?でも、これ気づくのに半時くらいはまった。
これだとスペースが2文字以上空いていないからエラー
build_flags =
-laquestalk
-Llib/
これはコメントが余計なところにあるからエラー
build_flags =
-laquestalk #ここにコメントしちゃだめだよ
-Llib/
サンプルコードの編集
最初の2つは必須。これやらないとビルドできない。最後の声のスピードはお好みで。でも100だと早すぎて全然わからない。
#include
- setup()の前に関数のプロトタイプ宣言の追加
// function prototype declaration
void DAC_Create();
void Play(const char *koe);
void DAC_Release();
int DAC_Write(int len, int16_t *wav);
void setup(){
- 読み上げ速度を標準の100から40に落とす
int iret = CAqTkPicoF_SetKoe((const uint8_t*)koe, 45, 0xffffU);
ふう。ようやく動いた~~~。GWの2日目から取り組んでたから7日かかったのか。。。