|
Raspberry Pi Pico調査
- こちらのページでRaspberry Pi PicoにMP3デコーダを移植。
- FatFs の Raspberry Pi PICO への移植に関してはElehobicaさんを参照した。
- pico-playgroundのsine_waveでI2Sの調査
- sine_waveにFatFsを組み合わせてWAVプレーヤを試作してみたのがこちら。
|
|
本製作の回路
- スピーカはモノラルとする。
- 表示器は秋月の「0.96インチ 128×64ドット有機ELディスプレイ(OLED)」(制御チップSSD1306)
- ロータリエンコーダは秋月の「ロータリーエンコーダ(24クリックタイプ)」(通販コードP-06357)
|
|
途中経過
回路の主な部分をユニバーサル基板に作成したところで、タクトスイッチ、OLEDをブレッドボードに置いて動作テスト。プログラムの骨格を完成させた。
|
|
ケースの製作
- タカチのMB11-7-15を選択。
- 加工もタカチへ注文してみます(4回目)。依頼する窓口は「共立エレショップ」。
- 当初MB10-9-12で加工注文したのだが、デザインルールに反する(ケースの折り曲げ箇所に穴が近すぎる)らしく、その注文をこちらからキャンセル。改めてMB11-7-15で注文した。
|
|
ケース加工発注の流れ
- 共立エレショップのサイトから最初の申し込みをします。送付した図面データはこれ。注文入力したのが月曜日の夕方。
- 共立エレショップから「受け付けました」の自動返信メールが来る。
- 翌日、共立エレショップから「タカチに見積依頼を出しました」のメールが来る。
- 翌週月曜日、共立エレショップから見積結果が来る。14,960円。タカチで書き直した図面と公差や注意事項の資料(PDF)が添付されていた。
- その図面データをチェックした上で正式に注文することにします。必要なアクションは2つ。
- 見積メールにある手順に従って共立のサイトで注文入力。タカチ以外の部品もいっしょに注文できるみたいだが今回はケースだけにする。
- タカチで書き直した図面データに「押印またはサイン」をして返信する。「押印またはサイン」はAdobe Acrobat Reader DC の署名機能で名前と日付をPDFに書き込みました。それを見積メールの返信で共立に送ります。
- 注文受付メールが共立から来る。これはいつもの自動返信メールだろう。
- 振込先のご案内メールが来る。これに最終的な金額と振込先が記載されている。金額は見積通り14,960円で、振込先はいつもの共立の口座である。
- 振込後、入金確認メールが来る。
- 続いて「タカチに手配しました」メールがくる。正式注文入力からここまで1日で済んだ。
- さらに翌日、出荷予定日の連絡が共立から来る。
- 出荷予定日になり、「メーカーから出荷しました」メールが共立より来る。
- 翌日到着。正式注文から9日目。同時に共立から納品書がPDFで来る(以前は郵送だった)。
- インプレッション
- 前回(3年前)注文と比べて。同じMBシリーズだけども今回の方が少し大きい、しかし穴数はそれほど変わりない。昨今の世間の値上げラッシュからして20,000円越えも覚悟していたが、意外や前回より安かった。(もしかして角穴の数が費用に大きく影響する?)
- 納期も前回より早かった。
|
|
作成したプログラム(Raspberry PI Pico)
- ソース一式はこちら。
- Windowsのプログラムで前処理データを作成しておき、それに基づいて動作する仕組みは今までの製作と同じ。
(FatFsのf_readdir関数を使って存在するサブディレクトリやMP3ファイルを取得する、というような処理はまったくやっていない。またOLEDに文字を表示するためにFONTXフォントファイルを読みだすこともやっていない。)
- ソース内サブディレクトリ
- fatfs - pico_fatfs_testに付属のバージョン(R0.14b)。FF_LFN_UNICODE=1, FF_FS_MINIMIZE=2 などの設定変更。
- libmad - 0.15.1bを移植
- madplay - libmadを利用するアプリケーション例(madplay)からの流用ソース
- pico_audio - pico-extrasのpico_audio
- pico_audio_i2s - pico-extrasのpico_audio_i2s
- pico_util_buffer - pico-extrasのpico_util_buffer
- ソースはもっと整理できると思われる。手持ちのMP3ファイルに最適化するならpico_audioのsample_conversion.hとか。madplayから移植した resample.c とか struct playerのフィールドとか。最適化しないとスムーズな再生ができない、という音源もないので深入りしない。
- 機能がまったく割り当てられていないタクトスイッチが一つある。(思いつくオプション機能は、OLEDのコントラスト設定とか、だが)
|
|
作成したプログラム(Windows)
- ソース一式はこちら(VC++ 2019 で開発)。EXEをSDメモリのルートに置き、MP3ファイルを追加した後などにコマンドプロンプトで実行する。
- 処理内容:ディレクトリ構成ファイル・MP3ファイルリストの作成。ディレクトリ名・ファイル名・曲名のOLED表示イメージの作成。ランダム再生の再生順作成。
- 曲名については、MP3ファイルのタグ情報から曲名を取得できる場合にはそれを使い、取得できない場合はファイル名そのものを曲名とする。
(タグ情報から取得できる曲目はときに"アルバム名+曲名"の形式になっていることがある。"アルバム名"の部分は全曲共通なので、その部分を削除して曲名だけにする処理もしている。また、曲名に最初から連番がついている場合とついていない場合がある。ついていない場合だけ連番を付加する。)
- タグ情報取得のため、libid3tag-0.15.1b と zlib-1.1.4 をリンクしている。どちらもそれぞれに付属のmsvc++用dspファイルでコンパイルできた。
ただ、libid3tagライブラリについては対象MP3ファイルをオープンするのにfopen関数を使っている。Windowsでロングファイルネームに対応するために_wfopen_s関数を使う処理を追加した。
|
|
結果
- exFATに今回初めて対応したことにより、所有する音源がすべて1枚のメディアに収まるようになった。
|