{
Source code under Bass license
by Alessandro Cappellozza
http://digilander.libero.it/Kappe
mail acappellozza@ieee.org
Notice
The body (this unit) only drive the classes and Bass,
the rest is wrtitten in OOD for separate the draw code
}
unit main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, osc_vis, spectrum_vis,
Dialogs, ExtCtrls, StdCtrls, ComCtrls, circle_vis, Bass, CommonTypes, ExtDlgs,
jpeg, Buttons, MPlayer, SLMultiInput, SLPair, LPComponent, MLDSPlayer,
ALDSAudioPlayer;
type
TFormPlayer = class(TForm)
Button1: TButton;
OpenDialog: TOpenDialog;
TimerRender: TTimer;
RadioMode: TRadioGroup;
RadioDraw: TRadioGroup;
ColorDialog: TColorDialog;
OpenPictureDialog: TOpenPictureDialog;
Image1: TImage;
PaintFrame: TPaintBox;
BackImageRes: TImage;
Button4: TButton;
Button5: TButton;
Button6: TButton;
BitBtn1: TBitBtn;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure TimerRenderTimer(Sender: TObject);
procedure RadioModeClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormPlayer : TFormPlayer;
Channel : DWORD;
implementation
{$R *.dfm}
procedure TFormPlayer.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
FormPlayer.perform(WM_SYSCOMMAND, $F012, 0);
end;
procedure TFormPlayer.FormCreate(Sender: TObject);
begin
BASS_Init(-1, 44100, 0, Application.Handle, nil);
Spectrum := TSpectrum.Create(PaintFrame.Width, PaintFrame.Height);
CircleScope := TCircleScope.Create(PaintFrame.Width, PaintFrame.Height);
OcilloScope := TOcilloScope.Create(PaintFrame.Width, PaintFrame.Height);
end;
procedure TFormPlayer.Button1Click(Sender: TObject);
begin
Spectrum.SetBackGround(False, BackImageRes.Picture.Graphic);
Spectrum.Pen := clmaroon;
OpenDialog.Filter := 'mp3|*.mp3';
if not OpenDialog.Execute then exit;
channel := BASS_StreamCreateFile(False, PChar(opendialog.filename), 0, 0, BASS_SAMPLE_LOOP {$IFDEF UNICODE} or BASS_UNICODE {$ENDIF});
BASS_ChannelPlay(channel, False);
end;
procedure TFormPlayer.TimerRenderTimer(Sender: TObject);
var FFTFata : TFFTData; WaveData : TWaveData;
begin
if BASS_ChannelIsActive(Channel) <> BASS_ACTIVE_PLAYING then Exit;
case RadioDraw.ItemIndex of
2 :
begin
BASS_ChannelGetData(Channel, @WaveData, 2048);
CircleScope.Draw (PaintFrame.Canvas.Handle, WaveData, 35 , 45);
end;
1 :
begin
BASS_ChannelGetData(Channel, @WaveData, 2048);
OcilloScope.Draw (PaintFrame.Canvas.Handle, WaveData, 35, 50);
end;
0 :
begin
BASS_ChannelGetData(Channel, @WaveData, 2048);
Spectrum.Draw (PaintFrame.Canvas.Handle, FFTFata, 40, 60);
end;
end;
end;
procedure TFormPlayer.RadioModeClick(Sender: TObject);
begin
Spectrum.Mode := RadioMode.ItemIndex;
CircleScope.Mode := RadioMode.ItemIndex;
OcilloScope.Mode := RadioMode.ItemIndex;
end;
procedure TFormPlayer.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Bass_Free;
end;
procedure TFormPlayer.Button4Click(Sender: TObject);
begin
close;
end;
procedure TFormPlayer.Button5Click(Sender: TObject);
begin
BASS_stop();
end;
procedure TFormPlayer.Button6Click(Sender: TObject);
begin
BASS_Start();
end;
procedure TFormPlayer.BitBtn1Click(Sender: TObject);
begin
BASS_ChannelPlay(channel, False);
end;
end.