M5Stackでwav,mp3サウンド再生

#概要
M5Stackで音声ファイルwav,mp3を再生する手順です。

#環境
M1 Macbook Air
M5Stack Gray
microSD 16GB(16GB以下がいいと思う）

※M1 MacでM5Stack使う準備は、下記参照。
https://qiita.com/hextomino/items/69f9804038041618b243

#サンプルの実行(wavファイルの再生)
ファイル＞スケッチ例＞M5Stack＞Advanced＞Audio＞PlayWAVFromSDToDACを試す。
コンパイルとするとAudioFileSourceSD.h No such file or directoryと言われ、失敗する。

サンプルソースの冒頭に、追加すべきライブラリについて記載があるので、従う。
https://github.com/earlephilhower/ESP8266Audio
から、「↓code」を押して、download zipを選択。
Arduino＞スケッチ＞ライブラリをインクルード＞ZIP形式〜で、このzipファイルを指定し、インストール。
（このままで、コンパイルはできるが、音が出ない）
同様に、
https://github.com/Gianbacchio/ESP8266_Spiram
から、「↓code」を押して、download zipを選択し、インストール。

このライブラリは、そこそこ容量を食う。
M1ではROSETTA2変換のため、初回ビルド時間が結構かかる。
最大1310720バイトのフラッシュメモリのうち、スケッチが893514バイト（68%）を使っています。
と表示されます。ちょっと大きすぎな気がする。


▼再生ファイルの準備
記載の
https://ccrma.stanford.edu/~jos/pasp/Sound_Examples.html
の上から５つ目のPianoからpno-cs.wav(16bit,48kHz,20sec)をDL
カードリーダを使ってmicroSDにpno-cs.wavファイルをコピーする。

他の試したいwavファイルもコピーしておき、聞き比べるといい。ファイル名は控えておいたほうが便利。

#サンプルコード
付属のままです。
噂の通り、最初と最後に、ブチっとノイズがのり、ザーとノイズがのります。


```cpp:PlayWAVFromSDToDAC.ino
#pragma mark - Depend ESP8266Audio and ESP8266_Spiram libraries
/* 
cd ~/Arduino/libraries
git clone https://github.com/earlephilhower/ESP8266Audio
git clone https://github.com/Gianbacchio/ESP8266_Spiram

Use the "Tools->ESP32 Sketch Data Upload" menu to write the MP3 to SPIFFS
Then upload the sketch normally.  
https://github.com/me-no-dev/arduino-esp32fs-plugin
*/

#include <M5Stack.h>
#include <WiFi.h>
#include "AudioFileSourceSD.h"
#include "AudioGeneratorWAV.h"
#include "AudioOutputI2S.h"


AudioGeneratorWAV *wav;
AudioFileSourceSD *file;
AudioOutputI2S *out;

void setup()
{
  M5.begin();
  M5.Power.begin();
  WiFi.mode(WIFI_OFF); 
  delay(500);
  
  M5.Lcd.setTextFont(2);
  M5.Lcd.printf("Sample WAV playback begins...\n");
  Serial.printf("Sample WAV playback begins...\n");
  
  // pno_cs from https://ccrma.stanford.edu/~jos/pasp/Sound_Examples.html
  file = new AudioFileSourceSD("/pno-cs.wav");
  out = new AudioOutputI2S(0, 1); // Output to builtInDAC
  out->SetOutputModeMono(true);
  wav = new AudioGeneratorWAV();
  wav->begin(file, out);
}

void loop()
{
  if (wav->isRunning()) {
    if (!wav->loop()) wav->stop();
  } else {
    Serial.printf("WAV done\n");
    delay(1000);
  }
}
```

#サンプルの実行(mp3ファイルの再生)
ファイル＞スケッチ例＞M5Stack＞Advanced＞Audio＞PlayMP3FromSDToDACを試す。
同様にmp3ファイルを用意する。

#サンプルコード
付属のままです。
相変わらず、ブチっとノイズがのり、ザーとノイズがのります。


```cpp:PlayMP3FromSDToDAC.ino
#pragma mark - Depend ESP8266Audio and ESP8266_Spiram libraries
/* 
cd ~/Arduino/libraries
git clone https://github.com/earlephilhower/ESP8266Audio
git clone https://github.com/Gianbacchio/ESP8266_Spiram
*/


#include <M5Stack.h>
#include <WiFi.h>
#include "AudioFileSourceSD.h"
#include "AudioFileSourceID3.h"
#include "AudioGeneratorMP3.h"
#include "AudioOutputI2S.h"


AudioGeneratorMP3 *mp3;
AudioFileSourceSD *file;
AudioOutputI2S *out;
AudioFileSourceID3 *id3;

void setup()
{
  M5.begin();
  M5.Power.begin();
  WiFi.mode(WIFI_OFF); 
  delay(500);
  
  M5.Lcd.setTextFont(2);
  M5.Lcd.printf("Sample MP3 playback begins...\n");
  Serial.printf("Sample MP3 playback begins...\n");

  // pno_cs from https://ccrma.stanford.edu/~jos/pasp/Sound_Examples.html
  file = new AudioFileSourceSD("/pno-cs.mp3");
  id3 = new AudioFileSourceID3(file);
  out = new AudioOutputI2S(0, 1); // Output to builtInDAC
  out->SetOutputModeMono(true);
  mp3 = new AudioGeneratorMP3();
  mp3->begin(id3, out);
}

void loop()
{
  if (mp3->isRunning()) {
    if (!mp3->loop()) mp3->stop();
  } else {
    Serial.printf("MP3 done\n");
    delay(1000);
  }
}
```