音量與聲相(左右聲道平衡)是播放器最基礎的調節功能。Bass.dll 通過 BASS_ChannelSetAttribute / BASS_ChannelGetAttribute 統一管理通道屬性。本文展示如何在 Delphi 中使用兩個 TTrackBar 實現音量(0~1)與聲相(-1~1)的直觀控制,並即時顯示當前數值。
| 常量 | 範圍 | 說明 |
|---|---|---|
| BASS_ATTRIB_VOL | 0.0 ~ 1.0 | 音量增益,1.0 為原始音量,0.0 為靜音 |
| BASS_ATTRIB_PAN | -1.0 ~ +1.0 | 聲相平衡,-1.0 全左,0 中置,+1.0 全右 |
| BASS_ATTRIB_FREQ | >0 | 采樣率(變速不變調需配合 BASS_FX) |
procedure TForm1.FormCreate(Sender: TObject);
begin
{音量軌道條:0~40 對應 0.0~1.0}
TrackBar1.Min := 0;
TrackBar1.Max := 40;
TrackBar1.Position := TrackBar1.Max; {預設最大音量}
{聲相軌道條:-20~20 對應 -1.0~+1.0}
TrackBar2.Min := -20;
TrackBar2.Max := 20;
TrackBar2.Position := 0; {預設中置}
{Bass 初始化}
if HiWord(BASS_GetVersion) <> BASSVERSION then
MessageBox(0, 'Bass.dll 版本不符!', nil, MB_ICONERROR);
if not BASS_Init(-1, 44100, 0, 0, nil) then
ShowMessage('初始化錯誤');
end;
procedure TForm1.TrackBar1Change(Sender: TObject);
var
vol: Single;
begin
{將 0~40 映射為 0.0~1.0}
BASS_ChannelSetAttribute(hs, BASS_ATTRIB_VOL, TrackBar1.Position / TrackBar1.Max);
{讀回驗證}
BASS_ChannelGetAttribute(hs, BASS_ATTRIB_VOL, vol);
Label1.Caption := Format('當前音量值: %f', [vol]);
end;
procedure TForm1.TrackBar2Change(Sender: TObject);
var
pan: Single;
begin
{將 -20~20 映射為 -1.0~+1.0}
BASS_ChannelSetAttribute(hs, BASS_ATTRIB_PAN, TrackBar2.Position / TrackBar2.Max);
BASS_ChannelGetAttribute(hs, BASS_ATTRIB_PAN, pan);
Label2.Caption := Format('當前相位值: %f', [pan]);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Mp3Path: AnsiString;
begin
BASS_StreamFree(hs);
OpenDialog1.Filter := 'Mp3 文件(*.mp3)|*.mp3|Wav 文件(*.wav)|*wav';
if OpenDialog1.Execute then
Mp3Path := AnsiString(OpenDialog1.FileName);
hs := BASS_StreamCreateFile(False, PAnsiChar(Mp3Path), 0, 0, 0);
if hs < BASS_ERROR_ENDED then
Caption := '打開失敗'
else begin
{觸發 OnChange 同步當前屬性到介面}
TrackBar1Change(nil);
TrackBar2Change(nil);
Caption := string(Mp3Path);
end;
end;
上方軌道條控制音量(0~1),下方控制聲相(左~右),標籤即時顯示精確浮點數值。

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ComCtrls;
type
TForm1 = class(TForm)
OpenDialog1: TOpenDialog;
Button1: TButton;
Button2: TButton;
Button3: TButton;
TrackBar1: TTrackBar;
TrackBar2: TTrackBar;
Label1: TLabel;
Label2: TLabel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure TrackBar1Change(Sender: TObject);
procedure TrackBar2Change(Sender: TObject);
procedure FormDestroy(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses Bass;
var
hs: HSTREAM;
{ ... 完整實現代碼 ... }
end.
vol := Exp(ln(0.01) * (1 - pos/max)) 類似公式。BASS_ATTRIB_PAN 僅調整平衡,若需調整立體聲寬度(M/S 處理)需使用 Bass_FX 擴展。BASS_ATTRIB_VOL(需指定聲道索引)。BASS_ChannelSlideAttribute 實現音量淡入淡出、聲相平滑移動。掌握 BASS_ChannelSetAttribute/GetAttribute 即可輕鬆實現專業級的音量與聲相控制,為播放器提供核心調音功能。