mp3プレイヤー部分が大体出来ました
やっとmp3プレイヤーのGUIが組みあがったので、ここらで一旦まとめます。
色々機能も増やすつもりなので今回の製作物はメディアプレイヤーとします。
mp3プレイヤーの紹介動画をUPしてみました。
メディアプレイヤー製作中(mp3プレイヤー編)
秋月300円液晶の時はハードウェアにかなり重点を置いて作ってましたが
今回はソフトウェアで学ぶ事がとても多かったです。
構造体,列挙型,2次元配列,ステートマシンなど今まで使った事の無い
プログラム手法を使ってなんとか作れました。
並列処理が結構多いので、初めてRTOSというものが欲しくなってきましたw
今回、mp3デコーダを使うのは初めてだったので
色々と気づいた事もありました。
基本的な仕様や使い方は先人の方々の解説をご覧頂ければと思うのですが
その他のVS1011の癖やmp3の注意点等を、ここに備忘録として残す事にします。
1.ホワイトノイズを軽減させるには出力にシリアルに抵抗をつけると良い
まず、現在のメディアプレイヤーの回路図を載せます。(画像右下をクリックで拡大)
ここで見て頂きたいのは図面左端のVS1011eの出力に入っている47Ωの抵抗です。
最初、この抵抗が無い状態でヘッドホンで聞いているとホワイトノイズが大きく気になったので
解決方法をネット上を検索しているとYuki様のサイトで抵抗を直列に挿入する方法を紹介されていました。
挿入した結果、劇的にホワイトノイズが軽減しました。ありがとうございます!
ただ、こちらのサイトで紹介されているのはID3V1の事例で、
ファイル先頭からフレームヘッダを読み出しているのですが
ID3V2の場合はIDタグがファイル先頭に来ている為フレームヘッダは読み出せません。
よって、タグ部分を飛ばして読まなければなりません。
フレームヘッダからビットレート等を入手してやっと再生時間や
再生シーク後のデータ位置を求める事ができるようになります。
持っているmp3ファイルで試したところ、1秒以内の精度は出ています。
mp3ファイルからビットレート情報を読み出すコードを掲載します。
ただ、かなり適当に作っていますので参考程度にご覧下さい。
3.デコーダにコマンドを入力する時は、DREQがHになるのを待ってからにする。
そのまんまですね。データ転送中にコマンドを入力する時に注意します。
相手がOKじゃないのに無理やりというのは紳士じゃないのです。
4.デコーダに送信するデータは必ず4バイトでアライメントされている事。
これはデータシート(和訳)には載っていないようです。(むしろmp3側の仕様?)
アライメントされて無い場合は音楽が雑音だらけになります。
途中再生をするときにこれでハマりました。
プログラムの処理としては送信データアドレスの下位2bitをクリアする事で4バイトアライメントとしました。
○mp3プレイヤーを作ってみて
自分も市販のmp3プレイヤーを持っていますが
GUIを含めて作るのが、こんなに大変だとは思わなかったww
しかも例外処理とかはしていない訳ですから、市販の製品の完成度の高さには頭が下がります。
自分が持っているのはSONYのNW-S744で
動画、静止画、FMラジオ機能がついていて非常にコンパクトです。
さらにノイズキャンセリング機能までついていて、喫茶店で勉強するときには物凄く重宝します。
これが無いと生きていけないw
超お勧めです。