LPC2388のUSBホスト機能を用いてスピーカを鳴らす作業はいくつかの点でつまづいたものの、スピーカが鳴り始めています。この点については次回にでも記事にすることとして、きょうはSDカードからMP3ファイルを読み込んで再生する部分についてです。
SDカードのアクセス部分については、基本的にChaNさんのコードを流用させていだきました。FatFs R0.07を使っていますが、今回はLFNのサポートは落とし、読み取り専用にコンフィグして利用することとしました。MCIのドライバ部分については、コマンドの終了待ちと転送の終了待ちの部分でポーリング待ちするようになっていたので、これらについてはTOPPPERS/JSPのSemaphoreを使って待ち合わせするように変更しています。
MP3の再生部分のコードも、メモリ内の配列データの再生ではなくSD上のファイルから読み込んだデータを再生するように修正。これでようやくと、1曲まるまるデコードしてMMcodec01から再生出力できるようになりました。実際に聞いてみると、1曲の再生中に数回「ブツッ」と音がすることに気がつきました。どうやら、Codecへの出力処理が間に合わないことがあるようです。調べてみると、codecの割り込み優先度がMCIからの割り込みより低くなっていたので、codecからの割り込みを最優先にしたところ問題解決。
cplayコマンドで再生するファイル名を指定しているのですが、全文字指定するのも面倒なので、指定した文字数分だけマッチする最初のファイル名が見つかった時点で、再生ファイル名を決定しています。WMPでエンコードするとトラック番号がファイル名の最初に付くようですね。
SDカードのアクセス部分については、基本的にChaNさんのコードを流用させていだきました。FatFs R0.07を使っていますが、今回はLFNのサポートは落とし、読み取り専用にコンフィグして利用することとしました。MCIのドライバ部分については、コマンドの終了待ちと転送の終了待ちの部分でポーリング待ちするようになっていたので、これらについてはTOPPPERS/JSPのSemaphoreを使って待ち合わせするように変更しています。
MP3の再生部分のコードも、メモリ内の配列データの再生ではなくSD上のファイルから読み込んだデータを再生するように修正。これでようやくと、1曲まるまるデコードしてMMcodec01から再生出力できるようになりました。実際に聞いてみると、1曲の再生中に数回「ブツッ」と音がすることに気がつきました。どうやら、Codecへの出力処理が間に合わないことがあるようです。調べてみると、codecの割り込み優先度がMCIからの割り込みより低くなっていたので、codecからの割り込みを最優先にしたところ問題解決。
cplayコマンドで再生するファイル名を指定しているのですが、全文字指定するのも面倒なので、指定した文字数分だけマッチする最初のファイル名が見つかった時点で、再生ファイル名を決定しています。WMPでエンコードするとトラック番号がファイル名の最初に付くようですね。