前々回、前回に引き続き、M5Stack Core2を使ってチャーハンを輝かせるべく、プログラムを書いていきます。
blog.kimizuka.org
blog.kimizuka.org
GIFアニメにしてしまうと全く伝わらないのですが、実は蓋を開けた時に音楽が流れるようになっていまして、今回はそちらの機能に必要な音源の再生を実装します。
オーディオファイルの再生は、ESP8266Audioというライブラリを使用して実現しました。
ソースコード
#include <M5Core2.h> #include <driver/i2s.h> #include <AudioFileSourceSD.h> #include <AudioGeneratorMP3.h> #include <AudioOutputI2S.h> AudioFileSourceSD *file; AudioGeneratorMP3 *mp3; AudioOutputI2S *out; #define BCLK_PIN 12 #define LRCK_PIN 0 #define SADTA_PIN 2 #define EXTERNAL_I2S 0 #define OUTPUT_GAIN 100 #define DELAY 10 bool isPlay = false; void setup() { M5.begin(); M5.Axp.SetSpkEnable(true); M5.Lcd.fillScreen(BLACK); M5.Lcd.setTextColor(WHITE, BLACK); M5.Lcd.setTextSize(4); playMp3(); } void playMp3() { if (!isPlay) { isPlay = true; file = new AudioFileSourceSD("/bgm.mp3"); out = new AudioOutputI2S(I2S_NUM_0, EXTERNAL_I2S); out -> SetPinout(BCLK_PIN, LRCK_PIN, SADTA_PIN); out -> SetOutputModeMono(true); out -> SetGain((float)OUTPUT_GAIN / 100.0); mp3 = new AudioGeneratorMP3(); mp3 -> begin(file, out); } } void loop() { M5.update(); M5.Lcd.setCursor(0, 0); M5.Lcd.println(isPlay); if (mp3 -> isRunning()) { isPlay = true; if (!mp3 -> loop()) { mp3 -> stop(); isPlay = false; } } if (!isPlay) { playMp3(); } delay(DELAY); }
ひとまずこれで、M5Stack Core2の電源をONにすると、SDカード内のbgm.mp3がループで再生されます。
注意事項としては、
- microSDカードは16GB以下のものを使う
- 音源は128KBit、44.1KHz程度のものを使う
- モノラルの音源を使う(NS4168が搭載されているので)
です。