久しぶりに「DFPlayer Mini」を取り出したところ壊れたのか動かなかったので、再度Arduinoの「TMRpcm Library」でWAVファイルの再生をやってみようと。ネットには新しい情報がほとんどなく廃れたのかなと思います。だとすれば、余計やってみたくなりました。
(PS)投稿後ずっとこれで音楽のループ再生を聞きながら、音量を変えられないかと考えてました。”MsTimer2”が使えましたので少し変更します。「switch case」では「int」しか使えないので「1」で音量増、「0」で音量減です。ついでに、ポーズ/再開(p,70)と停止機能(s,73)も付けました。ただし、ポーズと停止をしてもdelay時間が終わったら、次の曲が再生されます。
(PPS)1回目の改良後、このような場合、タクトスイッチによる"attachInterrupt"が使えることを思い出し、更に改良して再アップしました。やはりチャタリングはあるので何か対策をと思いますが、まあこれが一応の完成形ということで。

 100均スピーカーでも結構大きく聞こえます。なお、スピーカー真ん中部分が凹んでいるのは孫が指でへこませるからです
 次の写真はちゃんとしたアンプに繋いだ場合です。

1.まず、Arduinoで再生可能なレベルにWAVファイルを整形します。
https://www.audacityteam.org/
から「Audacity」をダウンロード、インストール(マイクロソフトストアからでもできます)。用意した適当なWAVファイルを開きます。左下「プロジェクトファイルのサンプリング周波数」を22050Hz以下に落とします。次にメニューの「トラック→ミックス→ステレオからモノラルへ」を選択。最後に「ファイル→書き出し→WAVとして書き出す」。

2.変換したそのWAVファイルをmicroSDに保存しボードにSPI接続したスロットに挿入します。
3.以下のinoファイルをArduino互換ボード(ATmega168/328)に書き込みます。
#include <SPI.h>
#include <SD.h>
#include <TMRpcm.h>
#include <avr/power.h>
#include <MsTimer2.h> // 新規追加。Javier Valencia版。もう一つの方はInstallできても認識せず。
//SD
const int CS = 5;     // 4から5に変更してみた。13->CLK, 12->MISO, 11->MOSI
//Play *.wav
TMRpcm audio;
const int SpPin = 9;  // doesn't on 3
void changeSta() {    // 新規追加。割り込み関数。
  if (Serial.available()) {  //Send commands over serial to play
    switch (Serial.read()) {                  // 読み取ったcharは数値として扱われている。
      case '1': audio.volume(1); break;       // (31) Increase volume by 1
      case '0': audio.volume(0); break;       // (30) Decrease volume by 1
      case 'p': audio.pause(); break;         // (70) Pause or Continue playback
      case 's': audio.stopPlayback(); break;  // (73) Stop all playback
    }
  }
}
void volP(){ audio.volume(1); }  // 割り込み用に新規作成
void volM(){ audio.volume(0); } // 割り込み用に新規作成
void setup() {
  clock_prescale_set(clock_div_1); // 32MHz動作させられるらしいが効果は不明
  audio.CSPin=10;                  // 10ピンからも音が出せる。ただし、STEREOではない。
  Serial.begin(9600);
  audio.speakerPin = SpPin;
  if (!SD.begin(CS)) {  // CS=5
    Serial.println("SD failed");
    return;
  }
  audio.setVolume(6);      // ボリュームの初期設定。
  Serial.print("xxx0.wav");    // sampling Max 22050HZ (no BigFile!)
  Serial.println(" time 03:07");
  audio.play("xxx0.wav");
  MsTimer2::set(200, changeSta); // 新規割り込み関数の登録
  MsTimer2::start();             // そのスタート
  pinMode(2, INPUT_PULLUP);      // 新規割り込み用に準備
  pinMode(3, INPUT_PULLUP);      // 新規割り込み用に準備
  // デフォルトではピン割り込みに使えるのはD2,D3だけらしいので。
  attachInterrupt(digitalPinToInterrupt(2),volP,FALLING); // CHANGE No!
  attachInterrupt(digitalPinToInterrupt(3),volM,FALLING); // CHANGE No!
  delay(190000);                 // 演奏時間+3秒ほど
}
void loop(void) {
  Serial.print("xxx1.wav");//sampling Max 22050HZ (no BigFile!)
  Serial.println(" time 02:18");
  audio.play("xxx1.wav");
  delay(141000);
  Serial.print("xxx2.wav");//sampling Max 22050HZ (no BigFile!)
  Serial.println(" time 03:36");
  audio.play("xxx2.wav");
  delay(239000);
  Serial.print("xxx3.wav");//sampling Max 22050HZ (no BigFile!)
  Serial.println(" time 03:59");
  audio.play("xxx3.wav");
  delay(242000);
  
  Serial.print("xxx4.wav");//sampling Max 22050HZ (no BigFile!)
  Serial.println(" time 03:03");
  audio.play("xxx4.wav");
  delay(186000);
    
  Serial.print("xxx5.wav");//sampling Max 22050HZ (no BigFile!)
  Serial.println(" time 03:43");
  audio.play("xxx5.wav");
  delay(226000);
}
 以前作った時には、setupに記述したので1回のみの再生でしたが、今回はloop中にも記述し、まさにループ再生させてみました。delayさせないと音楽終了後延々とノイズが流れるので、演奏時間+3秒ほどdelayさせてます。さらに今回、10Pinからも音が出せると知りやってみました。疑似的にSTEREO感が出ます。
 ちゃんとしたアンプにも繋いでみましたが、サンプリング周波数が22050Hzだと結構よい音に私には聞こえます 。
。
