AFsoft WebSite(エーエフソフト・ウェブサイト)
 

オペレーティング・システムについて

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
DelphiXE3 [FMX]メディアプレイヤー(MediaPlayer) 2013/10/13
 
前頁で[Additional]内の「AniIndicator」(アニメインジケーター)について書きましたので次は、同じく[Additional]内の「MediaPlayer」(メディアプレイヤー)について見ていきます。
   【Delphi2010の記事はこちら】
   【DelphiXE3[VCLアプリケーション]の記事はこちら】
 
 

(ヘルプより)
FileName
現在のメディアプレーヤで再生されるメディアファイル名を示します。
Media は、FileNameプロパティが設定された際に、割り当ておよび作成されます。ファイル名には、メモリ上で特定できるようにファイルのパスを明示し、拡張子も付ける必要があります。
メディアプレーヤにアタッチされている現在の Media を空にするには、Clear メソッドを呼び出します。
 
(ヘルプより)
メディアファイルを再生するための非ビジュアルコンポーネントです。
 
TMediaPlayer コンポーネントを使用すると、メディアファイルを簡単に使用することができます。
 
アクセス中のメディアファイルは Media プロパティで指定されています。現在の TMediaPlayer で再生するメディアファイルを指定するには、FileName プロパティを設定します。ファイル名には、メモリ上で特定できるようにファイルのパスを明示し、拡張子も付ける必要があります。Play メソッドを呼び出すと、メディアファイルの再生を開始でき、Stop メソッドを呼び出すと、再生中のメディアファイルを停止または一時停止できます。現在の位置は CurrentTime プロパティで指定されます。また、TMediaPlayer では、Duration、VideoSize、Volume、State などのメディアファイルのプロパティも公開しています。
 
TMediaPlayer は、オーディオ ファイルや、ビデオ ファイルのオーディオ部分を再生するためのものです。ビデオファイルを表示するには、TMediaPlayerControl コンポーネントを使用してください。
 
との事で、Delphi2010・VCLアプリケーションではビジュアルコンポーネントでしたが、非ビジュアルコンポーネントに変わっているようです。また、この説明だけでは、どんなファイルに対応しているのかも分かりません。
 
取り敢えず下図のように配置して動かしてみました。



type
 TForm1 = class(TForm)
  ・・・
 private
  { private 宣言 }
  m_filename : string ;
  procedure MediaPlay ;
 public
  { public 宣言 }
 end;
 
var
 Form1: TForm1;
 
implementation
 
{$R *.fmx}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
 OpenDialog1.InitialDir := ExtractFilePath(m_filename);
 OpenDialog1.FileName := ExtractFileName(m_filename);
 if (OpenDialog1.Execute) then begin
  m_filename := OpenDialog1.FileName ;
  Label1.Text := 'ファイル名:' + m_filename ;
  MediaPlayer1.FileName := m_filename ;
  MediaPlay ;
 end;
end;
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Timer1.Enabled := False ;
 MediaPlayer1.Stop ;
 MediaPlayer1.Clear ;
end;
 
procedure TForm1.FormShow(Sender: TObject);
begin
 m_filename := '' ;
 Button1.SetFocus ;
 Timer1.Enabled := False ;
end;
 
procedure TForm1.MediaPlay ;
begin
 MediaPlayer1.Stop ;
 ProgressBar1.Max := MediaPlayer1.Duration ;
 ProgressBar1.Value := 0 ;
 if MediaPlayer1.Media <> nil then
  MediaPlayer1.Play ;
 
 Timer1.Interval := 100 ;
 Timer1.Enabled := True ;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Timer1.Enabled := False ;
 
 ProgressBar1.Value := MediaPlayer1.CurrentTime ;
 
 Timer1.Interval := 100 ;
 Timer1.Enabled := True ;
end;
というわけで、タイマーを付けているのは単に、途中経過を知りたいためプログレスバーを配置し、その値を0.1秒毎に表示させているだけです。
 
非ビジュアルコンポーネントで、オブジェクトインスペクタには何も見えていませんので分かりにくいかもしれませんが、いくつかのプロパティとメソッドがあります。
 
プロパティ(ヘルプより)
CurrentTime 現在の再生位置を示します。
CurrentTime は、100ns 単位で測定されます。ミリ秒を取得するには、CurrentTime を MediaTimeScale で割ってください。
CurrentTime を設定することで、再生される現在位置を制御することができます。
Duration メディア プレーヤに関連付けられた現在のメディアファイルの合計再生時間を示します。
Duration は、100ns 単位で測定されます。ミリ秒を取得するには、Duration を MediaTimeScale で割ってください。
Media このメディアプレーヤにアタッチされている現在の TMedia を示します。
Play および Stop メソッドを呼び出すと、現在の Media ファイルの再生を開始、および、停止や一時停止をすることができます。
Media は、FileName プロパティが設定された際に、割り当ておよび作成されます。
TMediaPlayer は、Media プロパティを次のプロパティを介して公開します: Duration、VideoSize、CurrentTime、Volume、および、State。
メディアプレーヤにアタッチされている現在の Media を空にするには、Clear メソッドを呼び出します。
Media タイプが音声だった場合、Play の呼び出しによって音声ファイルの再生が開始されます。Media タイプがビデオだった場合、Play の呼び出しによって、指定されたビデオ ファイルの音声コンポーネントのみが再生されます。ビデオ ファイルを表示するには、TMediaPlayerControl を使用して、現在の TMediaPlayer を、TMediaPlayerControl の MediaPlayer プロパティに設定することでリンク付けします。
State 現在関連づかれている Media が再生されているか、停止されているかを示します。
現在のメディアファイルが割り当てられていない、もしくはサポートされていない場合、State は Unavailable に設定されます。
現在のメディアファイルが再生中の場合、State は Playing に設定され、そうでなければ Stopped に設定されます。
VideoSize 現在のビデオファイルの解像度を示します。
VideoSize は、現在のメディア ファイルのネイティブの高さおよび幅を、ピクセルで示します。
VideoSize は、TPointF 型です。点の X 座標はウィンドウの幅を表し、点の Y 座標はウィンドウの高さを表します。メディアファイルが音声のみで、表示するウィンドウがなかった場合、もしくは、メディア プレーヤに関連付メディアファイルがなかった場合、VideoSize は (0,0) となります。
Volume 現在のメディアファイルのオーディオの音量を示します。
Volume の値は、0 から 1 の範囲内になります。 Volume が 1 だった場合、メディア ファイルはネイティブの最大音量で再生されます。 Volume が 0 だった場合、メディア ファイルはミュートされます。
現在のメディアプレーヤに関連付けられているメディアファイルがない場合、Volume は 1 になります。
メソッド
Clear 現在のメディアプレーヤをクリアします。
Clear を呼び出すと、メディア プレーヤにアタッチされている現在の Media を、クリアすることができます。Clear はまた、FileName プロパティを空にします。
Play 現在の Media の再生を開始します。
Play メソッドを呼び出すと、現在の Media を再生することができます。Media が割り当てられていなかった場合、Play は何も行いません。
再生している現在のメディアファイルを一時停止もしくは停止するには、Stop メソッドを呼び出します。
Stop 現在の Media の再生を停止、または、一時停止します。
Play を呼び出すと、現在の Media を停止または一時停止することができます。Media が割り当てられていなかった場合、Stop は何も行いません。
現在のメディアの再生を開始するには、Play メソッドを呼び出します。
 
wavVファイル、mp3ファイルが再生されるのは確認しました。しかし、MIDIファイルの再生が出来ません。ヘルプで TMedia の説明を見ると…
メディアファイルにアクセスするための基底クラスです。
 
TMedia は、メディアファイルに対するインターフェイスを定義した抽象クラスです。プラットフォーム固有のサブクラスで、Windows プラットフォームおよび Mac OS X プラットフォーム用の具象実装が提供されます。
 
TMedia では、ファイル名、サイズ、音量、状態、時間などのメディア ファイル プロパティを公開しています。
 
サポートされているメディア ファイルの形式は、各プラットフォームのネイティブな形式です。
 Windows の場合:
  オーディオの形式: .wma、.mp3、.wav
  ビデオの形式: .avi、.wmv
 Mac OS の場合:
  オーディオの形式: .mp3
  ビデオの形式: .mov、.m4v、.mp4
 
TMediaCodecManager を使用すると、カスタム メディア コーデックを登録してオーディオ/ビデオ機能のサポートを拡張することが可能です。
メディア ファイルに簡単にアクセスするには、TMediaPlayer コンポーネントおよび TMediaPlayerControl コンポーネントを使用します。
とあります。
コーデックの登録というのをすれば MIDIファイルが可能になるのかどうか、具体的にどのようにするのかはよく分かりませんが、やはり、MIDIファイルが標準で使えないというのは少々残念です。
 
ところで、XE4/XE5でのモバイル開発環境では、どういう形式に対応しているのか?にも少し興味はありますね。しかし、Windows〜MacOS間でも、共通するのは .mp3 だけですから、クロス開発でマルチプラットフォームなアプリを作れる、といっても、各環境に対応する形式のファイルもそれぞれ用意する必要があるって事で、単純に考えてしまう事はなかなか出来ないですね。動作確認もしっかり行う必要がありそうです。
 
そういえば Windows7 でのサウンドレコーダーも、WAVファイルではなく、WMAファイルとして保存されるようになっていますね。。。ファイル変換を行うツール等が必要になってきそうです。
 
非ビジュアルコンポーネントですので今回はスタイルについての記述はありません。
 
 
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>Delphi入門編
>Delphi2010
>DelphiXE3
▲2013/10/12
 2013/10/13
▼2013/10/13
 
シェアウェア
Script!World
データベース
 
お問い合わせ 
本サイトはリンクフリーです
リンクバナー
(C)Copyright 1999-2015. By AFsoft All Rights Reserved.