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

Delphi 結合 Bass.dll 實現循環播放切換:BASS_ChannelFlags 動態控制

     編輯:Delphi

前言

音頻播放器常見的「單曲循環」功能,在 Bass.dll 中可通過兩種方式實現:建立流時指定 BASS_SAMPLE_LOOP 旗標,或播放過程中動態切換 BASS_ChannelFlags。本文演示後者,配合 TCheckBox 實現循環模式即時開關。

核心 API:BASS_ChannelFlags

function BASS_ChannelFlags(handle: DWORD; flags, mask: DWORD): DWORD; stdcall;
  • flags:要設置的新旗標值。
  • mask:指定哪些位參與修改(僅修改 mask 為 1 的位)。
  • 返回值:修改前的旗標組合。

要開啟循環:BASS_ChannelFlags(hs, BASS_SAMPLE_LOOP, BASS_SAMPLE_LOOP)
要關閉循環:BASS_ChannelFlags(hs, 0, BASS_SAMPLE_LOOP)

關鍵代碼實現

1. CheckBox 點擊事件:動態切換循環旗標

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
  if CheckBox1.Checked then
    BASS_ChannelFlags(hs, BASS_SAMPLE_LOOP, BASS_SAMPLE_LOOP) {開啟循環}
  else
    BASS_ChannelFlags(hs, 0, BASS_SAMPLE_LOOP); {關閉循環}
end;

2. 開啟檔案時的預設非循環模式

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;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    CheckBox1: TCheckBox;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses Bass;

var
  hs: HSTREAM;

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

end.

技術細節補充

  • 旗標即時生效:即使正在播放中切換 CheckBox,循環狀態也會立即生效,無需重新播放。
  • 其他常用旗標:BASS_SAMPLE_FLOAT(32-bit 浮點輸出)、BASS_SAMPLE_3D(3D 音效)、BASS_SAMPLE_MONO(強制單聲道)等,均可用 BASS_ChannelFlags 動態調整。
  • 查詢當前旗標:呼叫 BASS_ChannelFlags(hs, 0, 0) 可獲取完整旗標組合,便於介面同步顯示。

總結

BASS_ChannelFlags 提供了靈活的運行時屬性修改能力,使「循環播放」等功能無需重建流即可熱切換,大幅簡化播放器邏輯。

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