ソフトウエアデコーダ式MP3プレーヤ(試作)
マイコンボード「mbed LPC1768」にソフトウエアデコーダを移植してMP3プレーヤを試作。更新: 2018/05/12, 2018/05/20, 2018/05/29, 2018/07/22, 2020/09/07, 2020/09/26
[LPCExpresso]試作 LPCマイコンのI2Sの資料としてNXP社のアプリケーションノート「AN11178 MP3 player solution on NXP LPC1700 series」がある。これの方針に沿って、ハードコードされたPCMデータで正弦波を発生させるプログラムを作成した。この時点のソース一式。 その後MP3デコーダlibmadの組み込みを試みたがうまくいかない(プログラムの実行が思いもよらない箇所でハングする...。) | |
[mbed]サンプルプログラムの移植 mbedへのlibmadの移植例としてmadplayerがある(この例はLPC1768の内蔵DACを利用している)。この例を試してみたところ動作しました。この時点のソース一式(開発はすべてのmbedのオンライン環境で行った。このソースはエクスポート機能で落としたもの)。 内蔵DACを利用するところは同じですが、ファイルシステムはFatFs+SDカードに変更してある。 | |
[mbed]I2S-DACの利用 mbedからI2Sを操作するためI2Sクラスを利用した。このクラスの利用例として flash_audio_playerI2Sがある(この例はハードコードされたPCMデータを再生する)。flash_audio_playerI2Sの例に沿ってI2Sクラスをmadplayerに組み込み動作を確認した。この時点のソース一式(これもmbedのオンライン環境からエクスポートしたもの)。 I2Sクラスにはunsigned shortの配列を引数にとるwrite関数を追加してあります。 | |
[mbed]高ビットレート MP3への対応 手持ちのMP3データで試したところ、通常使っているビットレート128kbpsのものは問題なく再生できた。しかしダウンロード購入した高ビットレート(286kbpsとか)は再生できなかった(無音)。原因の深いところまでは追い切れなかったが、input関数(main.cpp)のバッファメモリのサイズを2100バイトまで増やしたら再生できるようになった。 メモリのやりくりの対策を施したソース一式。 | |
[LPCExpresso]試作再開 mbed版madplayerを参照しつつLPCExpresso版の開発を再開した。その結果、再生できるところまでたどり着いた。この時点のソースはこれ。Releaseコンパイルでないと速度が間に合いません。 | |
[LPCExpresso]スイッチ追加 再生中止、音量変更などのテスト。ここまでの成果を元にMP3プレーヤ第12作を製作した。 | |
LPC1768からUSBメモリにアクセス (2020/09/07)
| |
PCM5102A 試作1(libmad / I2S) (以下 2020/09/26)
| |
PCM5102A 試作2(Helix Decoder / I2S)
|