3.MP3の構造は思ってたより単純だった
MP3の構造はどうなってるのか検索したけど、よくわからなかった。細かいヘッダの中身の解説はまだ要らないんだけどな。
探し方が悪いのかなぁ?
ということでMP3からPCMに変換するサンプルのソースコードから追っていくことにした。現場主義ってやつ?
1.ヘッダを検索する
2.ID3v2があれば読み飛ばす
3.MPEGフレーム情報を読み込む
4.データを変換する
以後1-4を繰り返す
あれ?そんなシンプルな話なの?
ただしVBR(可変ビットレート)だともっと真面目に解析しないとダメっぽいので、非サポートと書いてある。
それぞれの処理が関数になってるから、それぞれをmicropythonのドライバ関数として登録して、全体の制御はpythonプログラムで書くことにした。
関数の挙動を調べながらだから、修正しやすさ優先。
プログラム作って動かしてみると、スピード(音程)が実行するたび変わる。
なにこれ?picoSDKの周期タイマーがマトモに動いてない?
再実行する度にスピードが上がっていくんで待ち時間を増やすと音質が落ちる。電源を入れ直して初回はちゃんと動く。
しばらく悩んで気が付いた。
micropythonの再起動では、picoSDKで登録したタイマーは削除されてないんだ。
一度実行すると正しい周期で再生するが、二度三度と動かすと、それだけ多重に呼び出されでスピードが上がる。ウエイト時間を増やしてバランスを取ると、データが歯抜けになるから音質が落ちるということか。
あれ?VT100もインターバルタイマを使ってるな。ひょっとするとカーソル表示が変になる原因はこれか?
vtterminal.cの改造も必要くさい




