2012年3月5日月曜日

分解率(解決)

昨日、独自PSG音源の分解率(分解性能)のことで難産してましたが、解が見えてきました。

VG-Engineの音声システムは、100ミリ秒の周期で発音情報をD/A変換(ディジタルデータを音に変換)する形で音声を鳴らしています。WindowsとAndroidで、この部分の実装に用いる仕組みは違いますが、理屈は同じ。

  • Windows(DirectSound)の場合: 次の動作をする専用スレッドでループ処理
    1. 100ms分の音バッファを作る
    2. D/A変換
    3. 100再生完了のイベント待機
  • Android(OpenSL|ES)の場合:  100ms再生完了する都度、次の処理を実行(コールバック)
    1. 100ms分の音バッファを作る
    2. D/A変換

で、独自PSG音源+ドライバ(音源を発音させたり、消音させたりする処理部分のこと)は、何れも「100ms分の音バッファを作る」処理部分で実装してます。

問題があったのは、独自PSG音源の①発音(キーオン)、②消音(キーオフ)、③無音で処理をスイッチ的に切り分けていたこと。だから、そこでドライバのキーオンやキーオフの指示を処理するのが難しかった訳です。

なので、その部分の処理をスイッチ的に切り分けるのではなく、キーオン、キーオフ、無音などの状態に関係無く、常に(元々の)①発音(キーオン)相当として処理すれば良い訳です。

偉そうに言ってますが、実はコレ(スイッチ的に切り分けること自体が)、単純なバグじゃないか・・・
・・・ということに、この記事を書いていて気付きました。
何故昨日、気付かなかったし。
まぁ、バグとは得てしてそういうものか。
(ロジック的なバグは、処理を言葉で書いて整理すれば、解決し易い)

0 件のコメント:

コメントを投稿

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

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

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