直接呼叫 Windows Multimedia API (mmsystem.pas),輕量、無需拖放 TMediaPlayer 元件,適合簡單背景音樂播放。
mciSendString:以字串命令控制 MCI 設備(開啟、播放、停止、關閉)。
unit uMCIPlayer;
interface
uses mmsystem;
type
TMCIPlayer = class
private
FAlias: string;
FFileName: string;
public
constructor Create(const FileName, Alias: string);
destructor Destroy; override;
procedure Play(FromStart: Boolean = True);
procedure Stop;
procedure Pause;
procedure Resume;
function IsPlaying: Boolean;
end;
implementation
constructor TMCIPlayer.Create(const FileName, Alias: string);
var
Cmd: string;
begin
FFileName := FileName;
FAlias := Alias;
Cmd := Format('open "%s" type sequencer alias %s', [FFileName, FAlias]);
mciSendString(PChar(Cmd), nil, 0, 0);
end;
destructor TMCIPlayer.Destroy;
begin
Stop;
mciSendString(PChar('close ' + FAlias), nil, 0, 0);
inherited;
end;
procedure TMCIPlayer.Play(FromStart: Boolean);
var
Cmd: string;
begin
if FromStart then
Cmd := Format('play %s from 0', [FAlias])
else
Cmd := Format('play %s', [FAlias]);
mciSendString(PChar(Cmd), nil, 0, 0);
end;
procedure TMCIPlayer.Stop;
begin
mciSendString(PChar('stop ' + FAlias), nil, 0, 0);
end;
procedure TMCIPlayer.Pause;
begin
mciSendString(PChar('pause ' + FAlias), nil, 0, 0);
end;
procedure TMCIPlayer.Resume;
begin
mciSendString(PChar('resume ' + FAlias), nil, 0, 0);
end;
function TMCIPlayer.IsPlaying: Boolean;
var
Status: array[0..127] of Char;
begin
mciSendString(PChar('status ' + FAlias + ' mode'), Status, SizeOf(Status), 0);
Result := StrComp(Status, 'playing') = 0;
end;
end.
var
BGM: TMCIPlayer;
procedure TForm1.FormCreate(Sender: TObject);
begin
BGM := TMCIPlayer.Create('C:\Music\Background.mid', 'BGM1');
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
BGM.Free;
end;
procedure TForm1.btnPlayClick(Sender: TObject);
begin
BGM.Play;
end;
procedure TForm1.btnStopClick(Sender: TObject);
begin
BGM.Stop;
end;
type sequencer)type waveaudio)type mpegvideo,需安裝對應編解碼器)type avivideo)Format 已處理)。Play 後程式會立即繼續;如需等待播放結束可加 wait 旗標:play alias wait。