home *** CD-ROM | disk | FTP | other *** search
/ Chip 2005 November / CDVD1105.ISO / Software / Freeware / programare / bass / Delphi / fxtest / test.pas < prev   
Encoding:
Pascal/Delphi Source File  |  2005-09-14  |  4.4 KB  |  157 lines

  1. unit test;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   ComCtrls, StdCtrls, Bass;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     Button1: TButton;
  12.     TrackBar1: TTrackBar;
  13.     TrackBar2: TTrackBar;
  14.     TrackBar3: TTrackBar;
  15.     TrackBar4: TTrackBar;
  16.     OpenDialog1: TOpenDialog;
  17.     Label1: TLabel;
  18.     Label2: TLabel;
  19.     Label3: TLabel;
  20.     Label5: TLabel;
  21.     Label4: TLabel;
  22.     Label6: TLabel;
  23.     procedure Button1Click(Sender: TObject);
  24.     procedure FormCreate(Sender: TObject);
  25.     procedure FormDestroy(Sender: TObject);
  26.     procedure TrackBar1Change(Sender: TObject);
  27.     procedure TrackBar2Change(Sender: TObject);
  28.     procedure TrackBar3Change(Sender: TObject);
  29.     procedure TrackBar4Change(Sender: TObject);
  30.   private
  31.     { Private declarations }
  32.     chan: DWORD;
  33.   public
  34.     { Public declarations }
  35.   end;
  36.  
  37. var
  38.   Form1: TForm1;
  39.   p: BASS_FXPARAMEQ;
  40.   pR: BASS_FXREVERB;
  41.   fx: array[1..4] of integer;
  42.  
  43. implementation
  44.  
  45. {$R *.dfm}
  46.  
  47. procedure TForm1.Button1Click(Sender: TObject);
  48. var
  49.   p1: BASS_CHANNELINFO;
  50. begin
  51.   If OpenDialog1.Execute then begin
  52.     // free both MOD and stream, it must be one of them! :)
  53.     BASS_MusicFree(chan);
  54.     BASS_StreamFree(chan);
  55.     chan := BASS_StreamCreateFile(FALSE, PChar(OpenDialog1.FileName), 0, 0, BASS_SAMPLE_FX or BASS_SAMPLE_LOOP);
  56.     if (chan = 0) then
  57.       chan := BASS_MusicLoad(FALSE, PChar(OpenDialog1.FileName), 0, 0, BASS_MUSIC_LOOP or BASS_MUSIC_RAMP or BASS_SAMPLE_FX,0);
  58.     if (chan = 0) then
  59.     begin
  60.       // not a WAV/MP3 or MOD
  61.       Button1.Caption := 'Can''t play the file! Please select another.';
  62.       Exit;
  63.     end;
  64.     if (p1.flags and BASS_SAMPLE_8BITS) > 0 then
  65.     begin
  66.       // not 16-bit stereo
  67.       Button1.Caption := '16-bit stereo sources only. Please select another.';
  68.       BASS_MusicFree(chan);
  69.       BASS_StreamFree(chan);
  70.       Exit;
  71.     end;
  72.     Button1.Caption := OpenDialog1.FileName;
  73.     fx[1] := BASS_ChannelSetFX(chan, BASS_FX_PARAMEQ, 1);
  74.     fx[2] := BASS_ChannelSetFX(chan, BASS_FX_PARAMEQ, 1);
  75.     fx[3] := BASS_ChannelSetFX(chan, BASS_FX_PARAMEQ, 1);
  76.     fx[4] := BASS_ChannelSetFX(chan, BASS_FX_REVERB, 1);
  77.     // Set equalizer to flat and reverb off to start
  78.     p.fGain := 0;
  79.     p.fBandwidth := 18;
  80.     p.fCenter := 125;
  81.     BASS_FXSetParameters(fx[1], @p);
  82.     p.fCenter := 1000;
  83.     BASS_FXSetParameters(fx[2], @p);
  84.     p.fCenter := 8000;
  85.     BASS_FXSetParameters(fx[3], @p);
  86.     BASS_FXGetParameters(fx[4], @pR);
  87.     pR.fReverbMix := -96;
  88.     pR.fReverbTime := 1200;
  89.     pR.fHighFreqRTRatio := 0.1;
  90.     BASS_FXSetParameters(fx[4], @pR);
  91.     // play both MOD and stream, it must be one of them! :)
  92.     BASS_ChannelPlay(chan, False);
  93.   end;
  94. end;
  95.  
  96. procedure TForm1.FormCreate(Sender: TObject);
  97. begin
  98.   if (BASS_GetVersion <> DWORD(MAKELONG(2,2))) then
  99.   begin
  100.     Application.MessageBox('BASS version 2.2 was not loaded','Bass Version problem');
  101.     Halt;
  102.   end;
  103.   // setup output - default device, 44100hz, stereo, 16 bits
  104.   if not BASS_Init(-1, 44100, 0, handle, nil) then
  105.   begin
  106.     Application.MessageBox('Can''t initialize device','Bass Initialize problem');
  107.     Halt;
  108.   end
  109.   else
  110.     BASS_Start;
  111.   // Adjust buffer size to balance 'clicks' vs. response time, slower computers need bigger
  112.   BASS_SetConfig(BASS_CONFIG_BUFFER,1000);
  113. end;
  114.  
  115. procedure TForm1.FormDestroy(Sender: TObject);
  116. begin
  117.   Bass_Stop();
  118.   BASS_StreamFree(chan);
  119.   BASS_MusicFree(chan);
  120.   BASS_Free();
  121. end;
  122.  
  123. procedure TForm1.TrackBar1Change(Sender: TObject);
  124. begin
  125.     BASS_FXGetParameters(fx[1], @p);
  126.     p.fgain := 15-TrackBar1.position;
  127.     BASS_FXSetParameters(fx[1], @p);
  128. end;
  129.  
  130. procedure TForm1.TrackBar2Change(Sender: TObject);
  131. begin
  132.     BASS_FXGetParameters(fx[2], @p);
  133.     p.fgain := 15-TrackBar2.position;
  134.     BASS_FXSetParameters(fx[2], @p);
  135. end;
  136.  
  137. procedure TForm1.TrackBar3Change(Sender: TObject);
  138. begin
  139.     BASS_FXGetParameters(fx[3], @p);
  140.     p.fgain := 15-TrackBar3.position;
  141.     BASS_FXSetParameters(fx[3], @p);
  142. end;
  143.  
  144. procedure TForm1.TrackBar4Change(Sender: TObject);
  145. var
  146.     v: integer;
  147. begin
  148.     v := TrackBar4.position;
  149.     BASS_FXGetParameters(fx[4], @pR);
  150.     // give exponential quality to trackbar as Bass more sensitive near 0
  151.     pR.fReverbMix := -0.012*v*v*v; // gives -96 when bar at 20
  152.     BASS_FXSetParameters(fx[4], @pR);
  153.     Label5.Caption := inttostr(20-TrackBar4.position);
  154. end;
  155.  
  156. end.
  157.