Closed fuzz6001 closed 3 years ago
おおなるほど!ご報告ありがとうございます!
これは、案外厄介な問題ですね。現在約1msごとにWAVの再生状態をチェックしてそれに応じて割り込みを出しているので、運が悪いと最大1ms程度PCMがオーバーランする可能性があります。おそらくそのオーバーランが聞こえてしまっているんですね。
ひとつの解決策としてCPUコアをめちゃくちゃ速くするという手があるのですが、ちょっとすぐにはできそうにありません。何かいい方法が無いか考えてみます。
c88dd62d2fd09e044fd73c88fa0b33322de12ab0 このコミットで修正(もしくは軽減)されているようなのクローズします。
Wikiで報告させていただいているスパ2のPCMノイズについてですが、原因が分かったかも知れません。本当は自分で直したかったのですが、割り込みが絡んできて手に負えなくなってきましたので、こちらで報告させていただきます。
原因はPCM割り込み処理のタイムラグではないかと思います。割り込みが発生し、実際にエミュレータが処理をするまでのタイムラグです。このタイムラグの間に、本来であれば再生されないPCMデータが再生されてしまっているようです。
スパ2側のコードを読んでいないので一部想像になりますが、具体例としてタイトル画面のカーソル移動音について書きます。
0xA000
-0xBFFF
を使用。これはI/Oへの書き込みで判断しました。波形RAMは4KB+4KBのダブルバッファのようです(が、今回の件にダブルバッファは関係なし)。0xA000
から再生を開始し、0xC000
に来た時点で割り込み発生。0xC000
~のデータが再生されてしまう。(起動直後は0xC000
~にデータが無いためノイズが発生しない)という流れになります。 試しに、割り込みが発生した時点で無理やり音を止めるようにしてみるとノイズは無くなりました。
報告は以上になります。