第5回:音楽の再生



外部設計で決めたとおり、CD-DAの演奏処理を組みましょう。
第1トラックに音楽が入っているCDを1枚用意してください。

Delphiには、音楽を録音・再生するためのTMediaPlayerコンポーネントが存在します。
これを一つにフォームに置いてください。Systemタブの中にあります。
再生や停止ボタンがついたTMediaPlayer1がフォームに現れます。
このプロパティをオブジェクトインスペクタで下のように変更しましょう。

TMediaPlayer1のプロパティ
プロパティ
Name MediaPlayer
DeviceType dtCDAudio
Visible False

TMediaPlayerを使ってCD-DAを再生するには、
@CDが挿入されているドライブを指定
ACDをオープン
B再生するトラックの指定
C再生
D停止
ECDをクローズ
の手順を踏みます。
なお、@Aは最初に一度だけ、Eは最後に一度だけ行えば結構ですので、
ゲーム中では主にB〜Dを繰り返して使うことになります。

これを踏まえて、四つのメンバ関数を書きます。
また、現在演奏中のCDトラック番号を格納する変数もグローバルで宣言します(リスト9)。

            
implementation
(中略)
var
  BackBmp : TBitmap; //背景を格納
  CurBack : Integer; //表示中の背景の番号
  CharaBmp : TBitmap; //立ちキャラを格納
  CurChara : Integer; //表示中の立ちキャラの番号
  SetChara : Boolean; //立ちキャラを表示しているか
  MesWinBmp : TBitmap; //メッセージウィンドウ画像を格納
  MesWinTempBmp : TBitmap; //背景にメッセージウィンドウ画像を転送した画像を格納
  TextBmp : TBitmap; //メッセージ表示に使用
  AllText : TStringList; //メッセージを格納
  TextPoint : Integer; //表示するメッセージ番号を指す
  MTo : Integer; //最後に表示した行の番号
            
            
  CurTrack : Integer; //現在演奏中のCDのトラック
            

(リスト9)
            
//CDをオープンする
procedure TMainForm.CDOpen;
begin
   //CDが挿入されたドライブ名の指定
   MediaPlayer.FileName := 'Q:\'; ----------------------(19)
   //オープン
   MediaPlayer.Open;
    //演奏位置情報の形式を指定
   MediaPlayer.TimeFormat := tfTMSF;
end;

//---------------------------------------------------

//CDをtrack番目を演奏する
procedure TMainForm.CDPlay(track : Integer);
begin
   //開始位置の指定
   MediaPlayer.StartPos := track;
   //終了位置の指定
   MediaPlayer.EndPos := track + 1;
   //再生
   MediaPlayer.Play;
   //現在演奏しているトラックを格納
   CurTrack := track;
end;

//---------------------------------------------------

//CDの演奏を停止する
procedure TMainForm.CDStop;
begin
   //演奏停止
   MediaPlayer.Stop;
end;

//---------------------------------------------------

//CDをクローズする
procedure TMainForm.CDClose;
begin
   //クローズ
   MediaPlayer.Close;
end;
            

(19)でCDドライブの指定を行います。
皆さんご利用になるCDドライブ名を指定してください。

続いて、これらの手続きを呼び出します。
CDOpenとCDPlayはFormCreateの最後に、
CDStopとCDCloseはFormCloseイベントを新たに用意して書いてください(リスト10)。

(リスト10)
            
procedure TMainForm.FormCreate(Sender: TObject);
begin
   (中略)
   //テキスト表示ルーチンへ
   OneStep;
            
            
   //CDのオープンと再生
   CDOpen;
   CDPlay(1);
            
            
end;

procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
            
            
   //CDの停止とクローズ
   CDStop;
   CDClose;
            
            
end;
            

ここまで書けたら、CDを(19)で指定したドライブに挿入して、実行してみましょう。
画面の表示と共に、挿入したCDの第1トラックが演奏されましたか?
ゲームを終了すると、演奏は停止します。
ゲーム中で他のトラックを再生する時には、
CDPlay手続きの引数に演奏したいトラック番号を入れて、呼び出せばOKです。


第6回へ
アドベンチャーゲーム設計論トップへ戻る
開発分室へ戻る
トップページへ戻る