みかづきブログ・カスタム

基本的にはちょちょいのほいです。

M5Stack Core2 v1.1からmicroSDカードに保存されたmp3を再生する 🔈

前々回前回に引き続き、M5Stack Core2を使ってチャーハンを輝かせるべく、プログラムを書いていきます。

https://cdn-ak.f.st-hatena.com/images/fotolife/k/kimizuka/20230622/20230622114903.gif

blog.kimizuka.org
blog.kimizuka.org


GIFアニメにしてしまうと全く伝わらないのですが、実は蓋を開けた時に音楽が流れるようになっていまして、今回はそちらの機能に必要な音源の再生を実装します。

vimeo.com

オーディオファイルの再生は、ESP8266Audioというライブラリを使用して実現しました。

github.com

ソースコード

#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がループで再生されます。
注意事項としては、

です。

リポジトリ

github.com