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

Delphi 使用 Bass.dll 監測播放狀態:停止、播放、暫停、失速全掌握

     編輯:Delphi

前言

在開發穩健的音頻播放器時,實時掌握播放流的當前狀態至關重要。Bass.dll 提供 BASS_ChannelIsActive 函數,可精確區分停止、播放、暫停、失速四種狀態。本文展示如何在 Delphi 中利用計時器輪詢並顯示狀態。

狀態常量對照表

常量數值含義
BASS_ACTIVE_STOPPED0停止狀態(未播放或播放結束)
BASS_ACTIVE_PLAYING1正在播放
BASS_ACTIVE_STALLED2失速狀態(緩衝中,等待數據)
BASS_ACTIVE_PAUSED3暫停狀態

關鍵代碼實現

1. 計時器輪詢狀態

procedure TForm1.Timer1Timer(Sender: TObject);
var
  str: string;
begin
  if hs = 0 then Exit; {流未建立時退出}
  case BASS_ChannelIsActive(hs) of
    BASS_ACTIVE_STOPPED: str := '停止狀態';
    BASS_ACTIVE_PLAYING: str := '正在播放';
    BASS_ACTIVE_STALLED: str := '失速狀態, 正在等待數據';
    BASS_ACTIVE_PAUSED: str := '暫停狀態';
  end;
  Caption := str; {顯示於視窗標題}
end;

2. 播放控制按鈕

procedure TForm1.Button2Click(Sender: TObject); {播放}
begin
  BASS_ChannelPlay(hs, False);
end;

procedure TForm1.Button3Click(Sender: TObject); {暫停}
begin
  BASS_ChannelPause(hs);
end;

procedure TForm1.Button4Click(Sender: TObject); {停止}
begin
  BASS_ChannelStop(hs);
end;

3. 開啟檔案時的循環播放選項

hs := BASS_StreamCreateFile(False, PAnsiChar(Mp3Path), 0, 0, 0);
{若需直接循環播放,可在建立流時加入 BASS_SAMPLE_LOOP 旗標}
{hs := BASS_StreamCreateFile(False, PAnsiChar(Mp3Path), 0, 0, BASS_SAMPLE_LOOP);}

運行效果

視窗標題會隨著播放、暫停、停止操作即時切換顯示對應狀態文字。

播放狀態監測效果

完整單元代碼

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    OpenDialog1: TOpenDialog;
    Timer1: TTimer;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses Bass;

var
  hs: HSTREAM;

{ ... 完整實現代碼 ... }

end.

應用場景延伸

  • 自動下一曲:檢測到 BASS_ACTIVE_STOPPED 且非使用者主動停止時,觸發播放列表下一首。
  • 緩衝提示:網路串流播放時,BASS_ACTIVE_STALLED 可觸發「緩衝中...」動畫。
  • 防重複播放:播放按鈕點擊前先檢查狀態,避免重複調用 BASS_ChannelPlay。
  • 狀態持久化:程式關閉前記住播放狀態,下次啟動恢復。

總結

BASS_ChannelIsActive 是輕量級的狀態查詢 API,配合計時器輪詢即可構建完整的播放狀態機,是播放器核心邏輯不可或缺的一環。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved