2012年2月12日日曜日

サウンド系統(3)~PCMの罠

そういえば、一つ前の記事で、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 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。

合理的ではないものを作りたい

ここ最近、実機版の東方VGSの開発が忙しくて、東方VGSの曲追加が滞っています。 東方VGS(実機版)のデザインを作りながら検討中。基本レトロUIベースですがシークバーはモダンに倣おうかな…とか pic.twitter.com/YOYprlDsYD — SUZUKI PLAN (...