|
概要
- デコーダはSparkfunのMP3デコーダボード(品番:SFE-BOB-10608 / 使用チップ:VS1033)。
- プロセッサはPIC18F2580。
- オーディオアンプからスピーカまで同一ケースに収める。
- 写真の上が本作、下は第3作。
|
|
回路
- LCDはI2C接続のもの(ストロベリーリナックス:I2C低電圧キャラクタ液晶モジュール(16x2行))
- デコーダボード上のD-GNDとA-GNDとを繋いでいるハンダブリッジを切り離し、それぞれを電源回路のGNDに繋いでいる。
- オーディオアンプはTA7368。モノラル化して再生します。
- TA7368の電源ラインに入っている抵抗(4.7Ω)は最後の最後に追加。
製作途中では気にならなかった(ほとんど聞こえなかった)パルス製ノイズ("ビィイイイー"という)が、製作の最終段階では聞こえるようになってきた。抵抗を入れるアイディアは電子マスカットさんの作例に拠りますが効果があるようです。
|
|
プログラム(PIC)
- ディレクトリ選択機能は、SDカード上のディレクトリを直接たどるのでは無く、ディレクトリ構成を記述した固定長バイナリファイルをFatFsのf_lseek/f_read関数でたどる方法で実装した。
- 各ディレクトリに存在するMP3ファイルのリストも事前に固定長バイナリファイルで用意しておきます。
- ディレクトリ単位のランダム再生機能。 ランダム再生順を事前にPCで決定しておき、順番をディレクトリ構成ファイルにセットしておく。ランダム再生順のどこまで進んだかは履歴ファイルに保存する。
- 音量調整はデコーダICの機能を利用。再生時の音量をディレクトリごとに保存しておき、次回そのディレクトリを再生する際には保存しておいた音量に自動設定する。
- 履歴ファイル
- デコーダICのメーカ(VLSI Solution)が提供しているプラグインの中の「Pitch Shifter Plugin」を利用して再生テンポ変更ができるようにしてみた。
- プログラムサイズを圧縮するためFatFsを独自にカスタマイズした。具体的にはファイルへの書き込みは既存ファイルの上書きだけとして、新規作成および既存ファイルのサイズ変更を出来なくした。(従って書き込み予定のファイルは事前に空白ファイルとして用意しておく。それはPC側事前準備プログラムが行う。)
- CCS社のPIC18用コンパイラ(PCH)で開発した。MPLABX IDEのプロジェクトはこちら。
|
|
SDカードの準備
- MP3ファイルをSDカードへコピーする作業は普通にWindowsのファイルコピーである。
- しかしそれだけではFatFsの構成オプションや日本語(2バイト文字)を表示できないLCDなどの条件に合わないので、以下の準備作業を行う。
- まず手作業。日本語(2バイト文字)を含むディレクトリ名を半角英数カナの名前に変更する。(個人的に聞く音楽ジャンルはほとんど洋楽なのでそれほど大変な作業ではない。ただ、クラシック音楽については原題よりは日本語の通称名の方が馴染みがあったりするので日本語(2バイト文字)を使いたくなるが、これは将来の課題。)
- その後の作業をPC上の事前準備プログラムが行う(これはVisual C++ 2010 express edition で作成した)。
左の画像はSDカードのディレクトリ構成のイメージとバイナリエディタで表示したディレクトリ構成ファイル
|
|
事前準備プログラムの内容
- ディレクトリ名を8.3形式に変更。短縮すると名前がかぶる可能性があるが、その解決は手作業で。
変更前のディレクトリ名をファイルに保存しておきLCDへの表示文字列をそこから作成できるようにする。
- MP3ファイル名をディレクトリごとに単純な連番名(001.MP3, 002.MPS, ...)に変更
- MP3ファイルリストを各ディレクトリに作成。MP3ファイルのタグから曲名の取得も同時に行う。
- 音量記録ファイルを各ディレクトリに作成。1バイトで音量、1バイトでそのディレクトリの再生回数を記録する、たった2バイトのファイルでSDカードの利用効率はよくない。
- 以上、各ディレクトリに対して行う処理はSDカードのルートから再帰的にすべての階層のディレクトリに対して実施している。
- ディレクトリ構造ファイルをSDカードのルートに作成。ランダム再生順も同時に決定。
- 履歴ファイルをSDカードのルートに作成
- 「Pitch Shifter Plugin」のデータをSDカードのルートに作成。データそのものはVLSI SolutionからC言語の配列で提供されているので、それをそのままファイル出力する。
- エラーログファイルを作成。FatFsをカスタマイズしてファイルサイズ変更を不可としたので、エラーログの最大件数を事前に決めて、その分のファイルを作っておく。(実際にエラーがどの程度発生するかまだわからない)
- 以上の事前準備プログラムは Visual C++ 2010 express edition で作成した。EXEをSDカードのルートに置いてコマンドプロンプトで実行する。
|
|
前面
ボタンの機能はこのように割り当てた。
|
|
ディレクトリ表示例
表示名はディレクトリ構成ファイルに仕込んである。サブフォルダが存在するときは三角アイコンを表示、MP3ファイルが存在するときは音アイコン(?)を表示。
|
|
曲名表示例
これも表示名はMP3ファイルリストに仕込んである。
2桁の曲番号と曲名との間にスペースを入れていない。
|
|
実装
- ケースはTAKACHIのSY-110B
- オーディオアンプのTA7368にあり合わせのスピーカを使っているので、オーディオ回路の構成はAMラジオそのものである。
|
|
インプレッション
- カジュアルに音楽を聴くには良い仕上がりとなった。
- 足りないと感じる機能は日本語(2バイト文字)の表示機能ぐらい。
|