音は出るようになったものの、まだ気になる所があったので、更にチューニングをしてみました。
徹底的に追い込んでみたところ、想像以上にレトロで良い音がするようになりました。これで音源部分は大体完成形かなと思います。
- サンプリングレートをできれば48KHz(ステレオ)まで上げたい
リアル音源チップは~55KHzで演算しているようなので、頑張ってサンプリング周波数を48KHzまで上げようと最適化してみました。
ただ、単純にサンプリングレートを上げるだけですと、肝心のレンダリング処理は重くなりますし、他にもキューイング処理やタスク切り替え処理によるオーバーヘッドが無視できなくなります。1フレーム(T=10/fs)あたりのサンプリング数を10サンプルから増加させ、64サンプル(T=64/fs)分のレンダリング処理を一気に行い、まとめてDMA転送するようにしました。そのようにしてレンダリング処理とDMA転送の効率を上げた結果、Core1の負荷率75%程度でFM8声+PSG3声をリアルタイムでレンダリングできるようになりました。まだCPUパワーには少しだけ余裕がある感じです。
なお、現時点ではSIMDの力を借りなくても要求を満たせることが判ったので、ターゲットマイコンはESP32-S3(Xtensa LX7)ではなくESP32無印(Xtensa LX6)としました。 - まだノイジーな感じがする
コードを改めて見返してみたところ、DMAバッファの処理がミスっていたため修正しました。転送バイト数を指定するところを転送サンプル数を指定するという初歩的なミスを犯していました。
そして今の時点での出音を、ライン出力経由でレコーダーを使って録音してみました。
1)X1版スペースハリアー(メインテーマ)
2)YS2より水路の面のBGM
取りあえずやれるところまではやってみた感じです。そろそろ次のステップに進む予定です。
という訳で乞うご期待!?