リソースの管理ムズすぎ。
買ったもの
小さいスピーカーとアンプボード(DIP化済み)
(左の袋に入ってるオペアンプは今回使ってないよ。)

「電子工作ステーション」って通販サイトで購入したよ
はんだごて持ってないからはんだ付けして送ってくれる有料オプションマジで助かった
購入したときの記事↓
結線
繋ぐだけだからめっちゃ簡単
アンプボードのピン間が2.54mmピッチより狭くて
ブレッドボードに挿せなかったからジャンパーで無理矢理繋いだよ

片側のチャンネルだけなのにモジャモジャでウケる。
音声のフォーマット
元の動画ファイルから音声をひっぺがしてadpcm形式に変換する
adpcmの中身はwavヘッダ無しで、1バイト目から音声データ
16kHz、12bit、PWMで再生
音声の変換
動画ファイルをpythonで生のADPCMに変換
ここに載せてたソースが間違えてた・・
ちゃんと変換できるソースはこちら↓
Raspberry Pi PicoでAT-Xを作る⑰ 音声がブツブツ鳴るのを解決する
役割分担
core0
・LCDへの描画
・adpcmをpcmにデコード ←New!!
・PWMで音声を再生 ←New!!
core1
・microSDからフレームデータの読み込み
・フレームデータの展開
・microSDからadpcmの読み込み ←New!!
再生までの流れ
core1で動画1フレーム分の描画データを読み出した直後に
音声も1フレーム分読み出してadpcmのバッファにプッシュ
↓
core0で動画を1フレーム描画した直後に
1フレーム分のadpcmをpcmにデコードしてpcmのバッファにプッシュ
この繰り返しで動画用のバッファも音声用のバッファも1フレーム分くらいは埋まってるようにしてある
PWMでの音声再生自体はタイマーを使って16kHz(62.5usに1回)で呼び出され続ける
イベントハンドラに着火
↓
pcmのバッファから1バイト(2サンプル)ポップして
duty比を変更
結果
ピッチ、再生速度、動画との同期は完璧にできた
でも1秒に6回くらいの頻度で音がブツブツ鳴っててまともに聴いてられない・・・
最後のクラッシュシンバルの減衰おかしいよね??
おわりに
タイマーの割り込みが悪さしてる とか メモリ足りない とか
色んな原因考えて色々(DMA転送、デコードするコアを変更)やってみたけど
まだ原因わかってない・・・
続きはこちら↓



