chakokuのブログ(rev4)

テック・コミック・ごくまれにチャリ

SH2でWAVファイルを光デジタル出力テスト

これまで、SH2の光出力(SPDIF)でサイン波を出すテストはしたけど、PCMで構成される普通のWAVファイルを鳴らしたことはなかった。今回かなり制限付きではあるけど、WAVファイルを光出力経由で再生させた。左の写真は装置の構成で、JTAGデバッガ+SH-2ボード、光デジタル経由で接続されたMiniDISCである。データはSDカードに書かれて、それをFAT lib(的)経由でメモリに読み込んで、SPDIFのハード経由で光デジタルに変換して、MiniDISCに送出する。MiniDISCを使っているのは光デジタルオーディオ装置がないから。。

左の図はデータの流れ。440Hzのサイン波をWAVデータ生成ツール(自作;-p)で生成して、それをSDカードに出力(file:440.wav)。SH2でSPIで接続されたSDからFAT lib(風)経由でデータを読み込みメモリに展開する。メモリ上のデータをSPDIF経由でMiniDISCに出力。なお、読み込みルーチンとSPDIF出力はまだ割り込み実装していないので、まずは複数セクタをメモリに読み込んでから、それをSPDIFにポーリングで転送する。。(割り込みもDMAも使っていない)

というわけで、、実装はボロカスだけどとりあえずサイン波の音は出た。現状での制限は以下。

  1. サンプリングレートがPC(44KHz)とSH2(48KHz)で異なっており、再生される音のピッチが狂う。サンプリングレートを変換するのはめちゃくちゃ大変そうだ。いっそうのこと、SH2側のクリスタルを付け替えるか。。
  2. FAT lib(風)はまだ作成段階で、ファイル名でセクタにたどり着けない。人間がクラスタ番号を指定してあげる必要あり。今後はFAT libを作りこんでファイル名>セクタ番号を辿れるように実装する。(これは単に作るだけ)
  3. SD読み込みとSPDIF送出が同時にできない。(割り込み実装ではなくポーリングでべた書きだから。。今後は割り込み+DMA+俺OSを投入して、並行処理できるようにする必要あり)

最低限の構成要素はそろったから、あとはそれらをシステムとして組み上げる作業に移行。。

■追記
どこまでできるのかわからないけど、SH2の演算プロセッサを使って、ソフトによるMP3デコードができないか?と思ってます。ハードでMP3デコードをやらせるのはまぁ定番なんで*1。。

MICROCHIPのApplication Noteにはそういったネタがある。
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1824&appnote=en551513

HelixのMP3 Decoder
https://datatype.helixcommunity.org/Mp3dec

mp3 decoderを作ってみようというブログ。。言いたいことはおぼろげに分かるけど、
サンプルコードとの差がかなりある。
http://blog.bjrn.se/2008/10/lets-build-mp3-decoder.html

*1:一杯配線しないといけないし