首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 使用 MCI 播放背景音樂:無需 MediaPlayer 元件

     編輯:Delphi

優勢

直接呼叫 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;

支援格式

  • MIDI (type sequencer)
  • Wave (type waveaudio)
  • MP3 (type mpegvideo,需安裝對應編解碼器)
  • AVI 影片 (type avivideo)

注意事項

  • 檔案路徑含空白時必須用雙引號包裹(上方 Format 已處理)。
  • Alias 名稱在進程內需唯一,建議用 GUID 或元件名稱避免衝突。
  • MCI 命令為非同步執行,Play 後程式會立即繼續;如需等待播放結束可加 wait 旗標:play alias wait。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved