本例效果图:
代码文件:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ExtCtrls;
type
TForm1 = class(TForm)
OpenDialog1: TOpenDialog;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Panel1: TPanel;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
procedure TrackChange(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses Bass;
var
hs: HSTREAM; {流句柄}
parameq: BASS_DX8_PARAMEQ; {频率均衡器的参数结构}
fx: array[0..5] of HFX; {DX 的效果句柄}
track: array[0..5] of TTrackBar;
procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
begin
Panel1.Align := alRight;
Panel1.BevelOuter := bvLowered;
Panel1.BevelWidth := 2;
Panel1.Caption := '';
Panel1.Width := 6*24 + 2;
for i := 0 to 5 do
begin
track[i] := TTrackBar.Create(Self);
track[i].Parent := Panel1;
track[i].Orientation := trVertical;
track[i].Width := 23;
track[i].Height := Panel1.Height;
track[i].ShowSelRange := False;
track[i].Left := i * 24 + 1;
track[i].Max := 15;
track[i].Min := -15;
track[i].Position := 0;
track[i].Tag := i;
track[i].OnChange := Self.TrackChange;
end;
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.Button1Click(Sender: TObject);
var
Mp3Path: AnsiString;
i: Integer;
begin
BASS_StreamFree(hs);
OpenDialog1.Filter := 'Mp3 文件(*.mp3)|*.mp3|Wav 文件(*.wav)|*wav';
if OpenDialog1.Execute then
Mp3Path := AnsiString(OpenDialog1.FileName);
{实现混响等效果, 需要指定 BASS_SAMPLE_FX 参数}
hs := BASS_StreamCreateFile(False, PAnsiChar(Mp3Path), 0, 0, BASS_SAMPLE_FX);
if hs < BASS_ERROR_ENDED then
Text := '打开失败'
else begin
Text := string(Mp3Path);
{要设置多种频率范围, 就需要多个效果句柄}
for i := 0 to 5 do
fx[i] := BASS_ChannelSetFX(hs, BASS_FX_DX8_PARAMEQ, 1);
end;
end;
{播放}
procedure TForm1.Button2Click(Sender: TObject);
begin
BASS_ChannelPlay(hs, False);
end;
{暂停}
procedure TForm1.Button3Click(Sender: TObject);
begin
BASS_ChannelPause(hs);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
BASS_Free;
end;
{动态建立的 TTrackBar 要调用的事件}
procedure TForm1.TrackChange(Sender: TObject);
var
i: Integer;
begin
i := TTrackBar(Sender).Tag;
parameq.fBandwidth := 20; {1 - 36}
case i of
0: parameq.fCenter := 100;
1: parameq.fCenter := 2000;
2: parameq.fCenter := 4000;
3: parameq.fCenter := 8000;
4: parameq.fCenter := 10000;
5: parameq.fCenter := 12000;
end;
parameq.fGain := - TTrackBar(Sender).Position;
BASS_FXSetParameters(fx[i], @parameq);
end;
end.
窗体文件:
object Form1: TForm1
Left = 222
Top = 114
Caption = 'Form1'
ClientHeight = 132
ClientWidth = 254
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
Position = poDesigned
OnCreate = FormCreate
OnDestroy = FormDestroy
PixelsPerInch = 96
TextHeight = 13
object Button1: TButton
Left = 8
Top = 17
Width = 75
Height = 25
Caption = #25171#24320
TabOrder = 0
OnClick = Button1Click
end
object Button2: TButton
Left = 8
Top = 56
Width = 75
Height = 25
Caption = #25773#25918
TabOrder = 1
OnClick = Button2Click
end
object Button3: TButton
Left = 8
Top = 93
Width = 75
Height = 25
Caption = #26242#20572
TabOrder = 2
OnClick = Button3Click
end
object Panel1: TPanel
Left = 92
Top = 47
Width = 141
Height = 41
Caption = 'Panel1'
TabOrder = 3
end
object OpenDialog1: TOpenDialog
Left = 80
Top = 88
end
end