LoginSignup
2
6

More than 5 years have passed since last update.

M5StackをVSCODEとPlatformIOで開発 ESP32で音声合成(AquesTalk pico for ESP32)をしてみる

Last updated at Posted at 2019-05-04

ようやく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

このサンプルコードの冒頭の部分を読んでみると、

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なので複数オブジェクトファイル)を実行ファイルに変換する時にリンクするようにする。

platform.ini
[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 <Arduino.h> の追加
  • 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日かかったのか。。。

2
6
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
2
6