どーも、まるです。٩(๑❛ᴗ❛๑)
先日、ATOMのスピーカーキットを購入したのだがそもそもArduino IDEでコンパイル出来なかったりして、動作確認に苦戦したのでまとめておきます。
(※Atom Echoとは異なるので注意)
Atom SPKでmicroSDを使おうとするも動かない
列挙している問題の粗方は、rawPCMで書き込むことで解決する。
microSDを妥協できる人は、気にしなくて良いかもしれない。(まぁ多分いない)
というか妥協したらM5StickCplus+SpeakerHATと同じやん
さて、気を取り直してエラーに立ち向かっていこう。
そもそもコンパイルが通らない
Githubの公式サンプルをコンパイルしようとしても、書き込み中フリーズする。
元々、microSDで気軽に再生できるmp3プレイヤーとして使用するつもりだったがこちらのRawPCMの方に切り替えて試すと、書き込めてフリーズはしなかった。しかし動作せず、シリアルモニタを見ると以下の様なエラーが発生した。
GPIO output gpio_num errorが発生
E (34) gpio: gpio_set_level(226): GPIO output gpio_num error
E (35) gpio: gpio_set_level(226): GPIO output gpio_num error
E (36) gpio: gpio_set_level(226): GPIO output gpio_num error
E (37) gpio: gpio_set_level(226): GPIO output gpio_num error
日本語でggっても全然記事が出てこず、困り果てていたところたまたまメルカリにて解決策を発見。
使わなくなったけどちょっと使うのに癖があったよ、ということで商品説明に解説リンクを貼ってくれていました。
この人がここまでやってくれていなかったら、休日潰したくなくて諦めてたのでこの記事はほぼこの人のおかげ。この場を借りて御礼申し上げます。<m(__)m>
摘要するとESP32for Arduino ver2.03ではこのエラーが発生するが、
ver 2.02では発生しないそう。
どうやらATOM SPKというより、内部で使用しているATOM TF-CARD Kit側のライブラリが公式に見捨てられた取り残されているらしい。
ArduinoIDEを別環境でインストール。念のためIDEのVerも1.8.13に揃える。この時点でちょっと面倒くさかった。
M5 ATOMのライブラリも再インストール。
ESP8266のインストール
ATOM TF-CARD Kitだけだとこれで動作するようになるが、ATOM SPKの場合、サンプルコード実行にまだ足りないライブラリがあるので依然として動作しない。
こちらより、Zip形式で新環境にESP8266をインストール。
詳しくは下記の記事参考されたし。
なお、TF-CARD側のExamplesにも似たようなMicroSDから音楽を再生するサンプルコードがあるが、全く異なる仕様につき動作しないので注意。(こちらは公式的にもリポジトリごとアーカイブされている)
これでようやく、microSDから音は出るようになる。
コンパイル時にエラーメッセージ
がしかし、コンパイル時に謎のエラーが発生する。
※エラーメッセージ忘れちゃったので、誰かここまで来た人教えてください(泣)
結論から言うと、コンパイル自体は成功しているので無視してOK。
音飛び(?)が起き、音声が正常に再生されない。
M5界隈で有名なタカオ(Takao)さん曰く、どうやら日本のゲームの音楽の.mp3が何故かM5Stackの公式動作確認用サンプル音源として配布されていたらしい。
何も気づかずにファンファーレを聴いていた。。
しかしこちらも、rawPCMだと非常にいい音で鳴るのだが、TF-Card Kit(MicroSD)側を通して.mp3ファイルで再生しようとするとブッ..ブッ..という音飛び(?)が発生する。
こちらは、以前の経験で心当たりがあった。
下記記事を参考に、音源ファイルをリサンプリング。
但し、今回は量子化8bitでなく24bitでも再生できた。
ようやくmicroSDからmp3が再生可能になるも…
ここまでしてようやく可能にはなったわけだが、如何せん8kHzモノラルの8kbpsでは音質が悪い。
が、これ以上時間をかけるわけにもいかないので、今回はこの辺でリタイア。
どなたかこの辺の対処法知ってたら、教えて欲しいです。。
まとめ
若干うろ覚えで書き起こした所もあるので、問題点あればジャンジャン指摘してください。
あとよかったらTwitterフォローお願いします。M5好きな人繋がりましょう。
以上、ありがとうございました!