そういえば、一つ前の記事で、VG-Engine側(サウンド制御スレッド)では、2205バイト=22050(Hz)×1ch(mono)×2(16bit)÷20(50ms)といってましたが、これは、二つ前の記事でいっていたことと矛盾しています(矛盾点は網掛け部分)。二つ前の記事では、システム側はステレオ(2ch)にすると言ってたのですが、一時的に仕様変更しました。
実は、今回の実装にあたり、PCMのデータ形式をチェックしたところ、PCMは波形1(1ch)、波形2(2ch)、波形3(1ch)、波形4(2ch)・・・という具合に交互のチャネルのデータがセットされています。独自形式のPCMデータはモノラルで、パンを指定して鳴らせる仕様にしようとしたのですが、それを実現しようとすると、2バイト(1波形)づつ交互にバッファリングしなければならない・・・という問題が生じます。つまり、ブロック転送(memcpy)ができないから、性能面で問題があります。
PSGエミュレータを実装するときは、そういう風にせざるを得ないけど、効果音用のサウンドシステムでそれをやるのは、とても微妙な気分・・・PSGエミュレータを実装した時は、当然、効果音と合成が必須だから、元々の仕様に戻すつもり(故に、一時的に)ですが。
BGM付きのゲームを作りたい欲求が無ければ、この仕様を定着させる可能性もありますが。
追記:あ・・・どうせ、合成時に戻さざるを得ないか。
ってことは、音声処理をソフトウェアで実装するケースでは、ブロック転送しないのが常識か。
音声プログラミングは素人同然なので、色々と常識が足りない。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。