Demo 11

Demo11 は、DGCSoundLib と DGCAudio の使い方を示している。どちらもこれまでのデモの中で使われてきているので(Demo4 など)、新しいことは何もない。違うのは、今回のデモプログラムは DirectDraw を使用しない、普通のアプリケーションであることぐらいである。

さて、使いやすい Direct Sound コンポーネントである DGCAudio であるが、ちょっとした問題があることが分かった。じつは、今回のデモプログラムのプロジェクトをデルファイで開いている時、またはデモプログラムが実行されている時は、その他の wav ファイルは再生できないようである。再生しようとしても、「ほかのアプリケーションがオーディオを再生しています。アプリケーションに割り込むか、終わるまで待ってからやり直してください。」と表示が出てしまう。何とかして割り込みたかったが、方法が分からなかった。それとも、ひょっとして環境が影響しているのだろうか?

DGCAudio を使う場合に注意すべき点は他にもある。これまでのデモでも触れているが、もう一度おさらいしておこう。まず、Direct Sound の性質上、同時に8音まで鳴らすことが出来るが、同じ wav を2つ同時に鳴らしたければ、2つライブラリに登録しなくてはならないこと。もし wav を再生している途中に同じ wav をもう一度再生しようとしても、2つ同時に鳴らすことは出来ず、片方を止めるか、再生しない事になる。

もう一つは、今回のような通常のアプリケーションで使う場合に問題になることで、ウインドウがアクティブでなくなると音が聞こえなくなることである。これは Direct Sound の性質で、度音が聞こえなくなっても、再びウインドウがアクティブになると元通りに聞こえるようになる。

procedure TForm1.Button1Click(Sender: TObject);
begin
     //Note: Replay will Stop the sound,
     //set the Position back to 0 and then
     //finally play the sound.
     DGCAudio1.Sound[0].Replay;
end;
これは Play メソッドと Replay メソッドの違いを書いてある部分である。Replay メソッドは、まず再生を中断し、position プロパティを0にして、Play メソッドを呼び出す。また Play メソッドは、現在の position プロパティの値の場所から音を再生する。通常の使用には Play よりも Replay の方が用途が多く使いやすいと思われる。

また、このデモプログラムには登場していないが、メソッドはこの二つだけではない。DGCAudio の Sound プロパティは、TDGCSoundBuffer クラスであるが、このクラスには後2つメソッドが用意されている。一つは PlayLoop メソッドであり、これはその名の示す通り、wav を繰り返しループさせて再生する。これで簡単な BGM として使えるようになっている。もう一つは Stop メソッドで、PlayLoop で再生されている音を止めるためのメソッドである。

今回のデモプログラムの説明はここまで。おそらく最も簡単なデモプログラムである。しかし、ここで話を終わってしまっては芸が無い。デモプログラムには出てこないが、実は DGCAudio にはより高度な使用の秘密が隠されている。

次に示すのは TDGCSoundBuffer クラスの全プロパティである。
  Size
  Channels
  BitsPersample
  Volume
  Pan
  Frequency
  Position
  Playing
  Buffer
読み込み専用のプロパティが多いが、ここで注目するのは Pan プロパティである。このプロパティは、左右のスピーカーの音量を調整するためのプロパティで、正の値の時は右のスピーカーの音が大きく、左のスピーカーの音が小さくなる。負の値の時はその逆となる。これによって音源が移動している様な時に時に、より臨場感あふれる音を鳴らすことが出来るのである。この時、Volume プロパティと組み合わせると更に効果的になるのは言うまでもない。

これで今回の解説を終わる。ゲームに音楽を付けたくても作曲が出来ない人は多いと思うが、インターネットにはフリーで wav や MIDI ファイルを公開している人もいるので、そんな人に頼めば使わせてもらえるかもしれない。

もどる