M5Stack IoT電子工作 制作したMP3プレーヤとインターネット・ラジオのデモ


Arduino C/C++プロググラミングで作る

制作したMP3プレーヤとインターネット・ラジオのデモ

図1 M5Stackを用いたMP3プレーヤを制作.SDカードから読み出した圧縮データをリアルタイムでデコードし,そのデコード結果をDAC経由でスピーカへ送信する画像クリックで動画を見る.または記事を読む.[提供・著]白阪 一郎
詳細[VOD/KIT] M5Stack Core2付き!ESP32で学ぶPython&Arduinoプログラミング入門

MP3プレーヤのしくみ

M5Stackを用いたMP3プレーヤを制作しました.MP3デコーダを活用し,SDカードに保存されたMP3ファイルを再生します.このしくみは,SDカードから読み出した圧縮データをリアルタイムでデコードし,そのデコード結果をDAC(ディジタルアナログ変換器)経由でスピーカへ送信することで実現されます.ESP32のCPUパワーとメモリは十分で,MP3デコードをソフトウェアで処理できる点が特徴です.

デコードには「Minimalistic MP3 Decoder」などの軽量なMP3デコーダが使用されます.このデコーダはパブリック・ドメインで提供されているため,商用利用やソース配布の自由度が高い利点があります.しかし,リアルタイム処理の安定性を確保するためには,以下のような課題があります.

  1. デコード処理の負荷
    MP3デコードは計算負荷が高く,特にビットレートが高い場合,ESP32のリソースを圧迫する可能性があります
  2. バッファリングの最適化
    音声データが途切れないようにするため,リング・バッファを適切に運用する必要があります

インターネット・ラジオのデモ

インターネット・ラジオでは,MP3プレーヤの技術を基礎とし,ネットワーク通信を追加することで実現します.ESP32はWi-Fi接続が可能であるため,インターネット上のストリームURLからMP3データを取得し,リアルタイムで再生できます.このプロセスでは,以下のステップが重要です.

  1. ストリーム接続
    Wi-Fiを介してラジオサーバに接続し,音声データをダウンロードします
  2. デコードと再生: 受信したデータをリアルタイムでデコードし,スピーカへ出力します

課題として,ストリーミング・データの途切れを防ぐために,データのバッファリングを最適化する必要があります.また,ネットワーク速度の変動に対応するため,ストリーム・データのエラー処理も重要です.

リング・バッファ

リング・バッファとは

リング・バッファ(circular buffer)は,バッファリングの効率を向上させるデータ構造です.リング状に連結した配列で,データの読み書きを循環的に行える特徴があります.M5StackのMP3プレーヤやインターネット・ラジオでは,オーディオ・データのバッファリングに使用されます.

リング・バッファの利点

  1. メモリ効率の向上
    配列を固定長で利用するため,メモリを無駄なく使用できます
  2. 高速アクセス
    リング状の構造により,先頭・末尾へのアクセスが高速に行えます

データの書き込みポインタを$W_p$,読み出しポインタを$R_p$とすると,次のように動作します.

  1. 書き込み
    $W_p$の位置にデータを追加し,次に$W_p+1$に進みます
  2. 読み出し
    $R_p$の位置からデータを取得し,次に$R_p+1$に進みます

オーディオ・データ処理への応用

オーディオ・データを途切れなく再生するためには,デコード結果をリング・バッファに書き込み,DACタスクで順次読み出します.この方法により,タスク間の処理時間差による音声途切れを防ぎます.

M5Stackのようなリソース制限のある環境では,リング・バッファのサイズ(例: 1MB)を適切に設定し,バッファ・オーバーフローやアンダーフローが発生しないように調整することが重要です.

〈著:ZEPマガジン〉

動画を見る,または記事を読む

著者紹介

  • 1977年~2008年 NECで中大型コンピュータの装置開発
  • 2009年 NECラーニングで組み込み研修講師
  • 就労移行支援ベルーフで職業訓練(IT)講師,現在に至る

著書

  1. [VOD/KIT]STM32マイコン&Wi-Fiモジュールで学ぶ C/C++プログラミング入門,CQ出版社.
  2. [VOD/KIT]Python×実習キット×スマホでできる!ESP32マイコン活用術,CQ出版社.
  3. [VOD/KIT]M5Stack Core2付き!ESP32で学ぶPython&Arduinoプログラミング入門,CQ出版社.
  4. ARM32ビット・マイコン電子工作キット ブレッドボードで気軽に始めよう,CQ出版社.
  5. 連載,子供向け1500円パソコン IchigoJam誕生,トランジスタ技術, CQ出版社.

参考文献

  1. [VOD/Pi KIT]ラズベリー・パイで学ぶLinux&Pythonプログラミング超入門,ZEPエンジニアリング株式会社.
  2. [VOD/KIT]実習キットでできる!ラズパイPicoでマイコン入門,ZEPエンジニアリング株式会社.
  3. [VOD/KIT]実習キットでできる!ラズパイPico×Wi-FiモジュールでIoT超入門,ZEPエンジニアリング株式会社.
  4. [VOD/KIT]一緒に動かそう!Lチカから始めるFPGA開発【基礎編】,ZEPエンジニアリング株式会社.
  5. [VOD/KIT]M5Stackで一緒に作ろう!IoTセンシング・エッジ×クラウド連携システム開発[改訂版],ZEPエンジニアリング株式会社.
  6. ラズベリー・パイ Picoマイコン入門 C言語開発環境の構築 ,ZEPエンジニアリング株式会社.