3.映像と音声がズレまくって調整が難しい
作った動画ファイルをいくつか再生して楽しんでたが、とある動画で気が付いた。
ダンスと音が合ってない…
処理をよく見るとMP3の再生を開始してから画像のデコードを開始してる。そりゃズレるよな。音声再生の開始を1フレームずらそう。
だいぶ改善したが、まだ微妙にずれてる。厳密にタイミングを合わせないとこの違和感は消せないな。
ということで、画像の表示切替タイミングとMP3のデコード開始を厳密に調整できるように改造して解決。
うむ。これで完璧。じゃぁちょっと長い奴で試そう。映画を変換して試そう。90分ちょいの映画だと400MB か。結構でかいが VIDEO CD よりは小さいな。イケるイケる。
あれ?こりゃダメだ。どんどんズレてく。画像の切り替えタイミングの調整に、前のフレームとの時間差を計算して、フレームレートに合わせるようにsleep するせいで誤差が蓄積してるかな?
と思ってMP3の再生開始時刻を記憶してそことの差分を使ってもやはりずれていく。
いっそのことPCMで再生した回数を累積でカウントするか?それなら絶対にずれないはず。ということでドライバにAPIを追加。ただ、DMAの転送カウンタを見てるんで、一周して初期値に戻る前に定期的に呼び出す必要があるのがちょっと面倒。DMA完了割り込みを使えば確実なんだが、そこまでやるのもなぁ。
ということでpythonプログラム側で、定期的に呼び出すようにループ処理を見直して何とか解決。
しかし、なんでずれていくんだろうなぁ?同じシステムクロックを使ってるから差が出るのはおかしいよな?micropythonに問題があるか??
と疑いだしたときに、ふと思い出した。
第三部 6.DMAでPWMデータを更新する設定方法
誤差 1% ぐらいは我慢する(別のPWMチャネルを使ってDREQを出せば正確なレートにすることもできるが、そこまでは頑張らない)
自業自得だった。orz




