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

Delphi 結合 Bass.dll 實現音量與聲相(Pan)控制:屬性設置與讀取

     編輯:Delphi

前言

音量與聲相(左右聲道平衡)是播放器最基礎的調節功能。Bass.dll 通過 BASS_ChannelSetAttribute / BASS_ChannelGetAttribute 統一管理通道屬性。本文展示如何在 Delphi 中使用兩個 TTrackBar 實現音量(0~1)與聲相(-1~1)的直觀控制,並即時顯示當前數值。

核心屬性常量

常量範圍說明
BASS_ATTRIB_VOL0.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)

關鍵代碼實現

1. 表單初始化:配置 TrackBar 範圍

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;

2. 音量調節事件

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;

3. 聲相調節事件

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;

4. 開啟檔案後同步介面

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.

進階應用提示

  • 音量推子(Fader):對數刻度映射更符合聽感,可用 vol := Exp(ln(0.01) * (1 - pos/max)) 類似公式。
  • 立體聲寬度:BASS_ATTRIB_PAN 僅調整平衡,若需調整立體聲寬度(M/S 處理)需使用 Bass_FX 擴展。
  • 多通道獨立控制:對於 5.1 環繞聲,可針對各聲道單獨設置 BASS_ATTRIB_VOL(需指定聲道索引)。
  • 平滑過渡:使用 BASS_ChannelSlideAttribute 實現音量淡入淡出、聲相平滑移動。

總結

掌握 BASS_ChannelSetAttribute/GetAttribute 即可輕鬆實現專業級的音量與聲相控制,為播放器提供核心調音功能。

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