マイコン工作実験日記

Microcontroller を用いての工作、実験記録

再生制御機能

2009-06-13 21:50:32 | MP3プレーヤ
LPC2388でI2S経由のCodecとUSBホスト経由のスピーカのどちらからもMP3を再生出力できるようになったのはいいのですが、まだまだ実験的な操作性ですので、これをちょっとは改善していこうかと思います。現状はシリアル・コンソールから再生を開始してしまうと、曲の最後までの再生が終了するまでの間、音量調節や再生の停止すらできません。とっても不便なので、まずはこの問題から改善することにしました。

考え方としてはプレーヤ制御を担うタスクを新たに用意して、シリアル・コンソールタスクから分離させればいいだろうということで、全体のタスク構成を次のようにしてみました。



mp3decoder_taskがMP3のファイルをひとつデコードして再生するタスクの本体です。このタスクを制御するのが、新たに用意するplayer_taskです。このタスクは外部から再生操作指示のイベントをもらい、その指示に応じてmp3_playerタスクを起動/終了させたり、休止/再開させることとします。操作指示を与えるためのボタンとかはまだ存在していませんので、当面はシリアル・コンソールからのコマンド入力により操作指示イベントを生成させることとします。

mp3player_taskではSDカードからMP3ファイルを読み込み、そのデコード結果をダブル・バッファに書き込んでいきます。mp3player_taskがデコード作業中にpcmsender_taskは、すでにデコードされたPCMデータを別のバッファから読み込んで、出力先のCODECあるいはUSBスピーカへ出力できるようにリングバッファに詰め込み直しています。USBスピーカの場合には、OHCIの出力のためにTD(Transfer Descriptor)の作成もおこなっていますので、実際には両者が使用するバッファの形式は異なっていますが、アドレス空間としては同一のDMA可能な空間を利用しています。