157 lines
4.5 KiB
ObjectPascal
157 lines
4.5 KiB
ObjectPascal
unit test;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
|
ComCtrls, StdCtrls, Bass;
|
|
|
|
type
|
|
TForm1 = class(TForm)
|
|
Button1: TButton;
|
|
TrackBar1: TTrackBar;
|
|
TrackBar2: TTrackBar;
|
|
TrackBar3: TTrackBar;
|
|
TrackBar4: TTrackBar;
|
|
OpenDialog1: TOpenDialog;
|
|
Label1: TLabel;
|
|
Label2: TLabel;
|
|
Label3: TLabel;
|
|
Label5: TLabel;
|
|
Label4: TLabel;
|
|
Label6: TLabel;
|
|
procedure Button1Click(Sender: TObject);
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure FormDestroy(Sender: TObject);
|
|
procedure TrackBar1Change(Sender: TObject);
|
|
procedure TrackBar2Change(Sender: TObject);
|
|
procedure TrackBar3Change(Sender: TObject);
|
|
procedure TrackBar4Change(Sender: TObject);
|
|
private
|
|
{ Private declarations }
|
|
chan: DWORD;
|
|
public
|
|
{ Public declarations }
|
|
end;
|
|
|
|
var
|
|
Form1: TForm1;
|
|
p: BASS_DX8_PARAMEQ;
|
|
pR: BASS_DX8_REVERB;
|
|
fx: array[1..4] of integer;
|
|
|
|
implementation
|
|
|
|
{$R *.dfm}
|
|
|
|
procedure TForm1.Button1Click(Sender: TObject);
|
|
var
|
|
p1: BASS_CHANNELINFO;
|
|
begin
|
|
If OpenDialog1.Execute then begin
|
|
// free both MOD and stream, it must be one of them! :)
|
|
BASS_MusicFree(chan);
|
|
BASS_StreamFree(chan);
|
|
chan := BASS_StreamCreateFile(FALSE, PChar(OpenDialog1.FileName), 0, 0, BASS_SAMPLE_FX or BASS_SAMPLE_LOOP {$IFDEF UNICODE} or BASS_UNICODE {$ENDIF});
|
|
if (chan = 0) then
|
|
chan := BASS_MusicLoad(FALSE, PChar(OpenDialog1.FileName), 0, 0, BASS_MUSIC_LOOP or BASS_MUSIC_RAMP or BASS_SAMPLE_FX {$IFDEF UNICODE} or BASS_UNICODE {$ENDIF},1);
|
|
if (chan = 0) then
|
|
begin
|
|
// not a WAV/MP3 or MOD
|
|
Button1.Caption := 'Can''t play the file! Please select another.';
|
|
Exit;
|
|
end;
|
|
if (p1.flags and BASS_SAMPLE_8BITS) > 0 then
|
|
begin
|
|
// not 16-bit stereo
|
|
Button1.Caption := '16-bit stereo sources only. Please select another.';
|
|
BASS_MusicFree(chan);
|
|
BASS_StreamFree(chan);
|
|
Exit;
|
|
end;
|
|
Button1.Caption := OpenDialog1.FileName;
|
|
fx[1] := BASS_ChannelSetFX(chan, BASS_FX_DX8_PARAMEQ, 1);
|
|
fx[2] := BASS_ChannelSetFX(chan, BASS_FX_DX8_PARAMEQ, 1);
|
|
fx[3] := BASS_ChannelSetFX(chan, BASS_FX_DX8_PARAMEQ, 1);
|
|
fx[4] := BASS_ChannelSetFX(chan, BASS_FX_DX8_REVERB, 1);
|
|
// Set equalizer to flat and reverb off to start
|
|
p.fGain := 0;
|
|
p.fBandwidth := 18;
|
|
p.fCenter := 125;
|
|
BASS_FXSetParameters(fx[1], @p);
|
|
p.fCenter := 1000;
|
|
BASS_FXSetParameters(fx[2], @p);
|
|
p.fCenter := 8000;
|
|
BASS_FXSetParameters(fx[3], @p);
|
|
BASS_FXGetParameters(fx[4], @pR);
|
|
pR.fReverbMix := -96;
|
|
pR.fReverbTime := 1200;
|
|
pR.fHighFreqRTRatio := 0.1;
|
|
BASS_FXSetParameters(fx[4], @pR);
|
|
// play both MOD and stream, it must be one of them! :)
|
|
BASS_ChannelPlay(chan, False);
|
|
end;
|
|
end;
|
|
|
|
procedure TForm1.FormCreate(Sender: TObject);
|
|
begin
|
|
// check the correct BASS was loaded
|
|
if (HIWORD(BASS_GetVersion) <> BASSVERSION) then
|
|
begin
|
|
MessageBox(0,'An incorrect version of BASS.DLL was loaded',0,MB_ICONERROR);
|
|
Halt;
|
|
end;
|
|
// setup output - default device, 44100hz, stereo, 16 bits
|
|
if not BASS_Init(-1, 44100, 0, handle, nil) then
|
|
begin
|
|
Application.MessageBox('Can''t initialize device','Bass Initialize problem');
|
|
Halt;
|
|
end
|
|
else
|
|
BASS_Start;
|
|
// Adjust buffer size to balance 'clicks' vs. response time, slower computers need bigger
|
|
BASS_SetConfig(BASS_CONFIG_BUFFER,1000);
|
|
end;
|
|
|
|
procedure TForm1.FormDestroy(Sender: TObject);
|
|
begin
|
|
Bass_Stop();
|
|
BASS_StreamFree(chan);
|
|
BASS_MusicFree(chan);
|
|
BASS_Free();
|
|
end;
|
|
|
|
procedure TForm1.TrackBar1Change(Sender: TObject);
|
|
begin
|
|
BASS_FXGetParameters(fx[1], @p);
|
|
p.fgain := 15-TrackBar1.position;
|
|
BASS_FXSetParameters(fx[1], @p);
|
|
end;
|
|
|
|
procedure TForm1.TrackBar2Change(Sender: TObject);
|
|
begin
|
|
BASS_FXGetParameters(fx[2], @p);
|
|
p.fgain := 15-TrackBar2.position;
|
|
BASS_FXSetParameters(fx[2], @p);
|
|
end;
|
|
|
|
procedure TForm1.TrackBar3Change(Sender: TObject);
|
|
begin
|
|
BASS_FXGetParameters(fx[3], @p);
|
|
p.fgain := 15-TrackBar3.position;
|
|
BASS_FXSetParameters(fx[3], @p);
|
|
end;
|
|
|
|
procedure TForm1.TrackBar4Change(Sender: TObject);
|
|
var
|
|
v: integer;
|
|
begin
|
|
v := TrackBar4.position;
|
|
BASS_FXGetParameters(fx[4], @pR);
|
|
// give exponential quality to trackbar as Bass more sensitive near 0
|
|
pR.fReverbMix := -0.012*v*v*v; // gives -96 when bar at 20
|
|
BASS_FXSetParameters(fx[4], @pR);
|
|
Label5.Caption := inttostr(20-TrackBar4.position);
|
|
end;
|
|
|
|
end.
|