前回の
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 ファイルが再生されます。
参考サイト