前回の M5StickC + Speaker Hat で音声データを再生する では音声データを直接スケッチ上に書くというスマートとは言い難い方法でした。 今回は事前に SPIFFS へ保存した WAV ファイルを読み込んで再生します。

WAV ファイルの作成

まずは再生したい音声データを以下の形式の WAV ファイルへ変換します。

  • モノラル
  • サンプリング周波数8000Hz
  • Unsigned 8-bit PCM
  • メタデータなし

スピーカーが1つなのでモノラル、 M5StickC (というか ESP32) の DAC が 8 ビットなので WAV ファイルも 8 ビットです。 サンプリング周波数は 8000Hz じゃなくてもいいかもしれませんが、 一般的に使用されている 44100Hz ではうまく動作しなかったためこの値にしています。

また、今回のスケッチではメタデータを一切考慮していないため、 メタデータがあるとシリアルモニタへ “invalid wave file header” というエラーメッセージが表示されファイルが読み込まれません。

以下は FFmpeg で変換する場合のコマンド例です。 FFmpeg で変換すると「Lavf58.29.100」(数字部分はバージョンによる) というメタデータが標準で追加されるので、 オプション -fflags +bitexact を付けてこの動作を抑制します。

ffmpeg -i input.wav -ac 1 -ar 8000 -acodec pcm_u8 -fflags +bitexact output.wav

WAV ファイルを SPIFFS へ保存する

ESP32-WROOM-32 SPIFFS アップローダープラグインの使い方 | mgo-tec電子工作 に書かれている手順に従い、 Arduino ESP32 filesystem uploader を使用して事前に WAV ファイルを SPIFFS へ保存しておきます。

スケッチの書き込み

以下のスケッチを M5StickC へ書き込みます。 WAVE_FILE_NAME は SPIFFS へ保存した WAV ファイルのファイル名です。 書き込み後、Aボタン(正面の「M5」ボタン)を押すと WAV ファイルが再生されます。

参考サイト