📄 u_vcbassdemo_main.pas
字号:
(*
----------------------------------------------
u_vcBASSDemo_main.pas
vcBASSDemo demo application - main form
----------------------------------------------
This source code cannot be used without
proper license granted to you as a private
person or an entity by the Lake of Soft, Ltd
Visit http://lakeofsoft.com/ for more information.
Copyright (c) 2001, 2007 Lake of Soft, Ltd
All rights reserved
----------------------------------------------
created by:
Lake, 08 Jan 2003
modified by:
Lake, Jan-Dec 2003
Lake, Oct 2005
Lake, Mar 2006
Lake, Apr 2007
----------------------------------------------
*)
{$I unaDef.inc }
{$I unaBassDef.inc }
unit
u_vcBASSDemo_main;
interface
uses
Windows, unaTypes, unaClasses, unaEncoderAPI,
Graphics, Forms, Controls, StdCtrls, ExtCtrls, ComCtrls, Classes, ActnList,
CheckLst, Dialogs;
type
Tc_form_main = class(TForm)
PageControl1: TPageControl;
c_tabSheet_bassInfo: TTabSheet;
c_tabSheet_music: TTabSheet;
c_tabSheet_stream: TTabSheet;
c_tabSheet_samples: TTabSheet;
c_tabSheet_CD: TTabSheet;
c_tabSheet_record: TTabSheet;
c_panel_bottom: TPanel;
Label1: TLabel;
Label2: TLabel;
c_edit_library: TEdit;
c_label_libVersion: TLabel;
c_button_bassLoad: TButton;
c_button_bassUnload: TButton;
c_memo_bassInfo: TMemo;
Label4: TLabel;
c_actionList_main: TActionList;
a_bass_libLoad: TAction;
a_bass_libUnload: TAction;
Button3: TButton;
Bevel1: TBevel;
c_comboBox_deviceId: TComboBox;
Label5: TLabel;
Label6: TLabel;
c_edit_playbackFreq: TEdit;
c_checkListBox_initFlags: TCheckListBox;
Label7: TLabel;
c_button_bassInit: TButton;
a_bass_libInit: TAction;
c_timer_update: TTimer;
Button1: TButton;
a_bass_libInfoUpdate: TAction;
c_tabSheet_volume: TTabSheet;
c_trackBar_volumeMusic: TTrackBar;
Label8: TLabel;
c_trackBar_volumeSample: TTrackBar;
Label9: TLabel;
c_trackBar_volumeStream: TTrackBar;
Label10: TLabel;
Bevel2: TBevel;
Label11: TLabel;
c_trackBar_volumeMaster: TTrackBar;
Button2: TButton;
Button4: TButton;
Button5: TButton;
a_bass_actStop: TAction;
a_bass_actStart: TAction;
a_bass_actPause: TAction;
c_edit_musicFile: TEdit;
Label12: TLabel;
Button6: TButton;
c_listBox_musicModules: TListBox;
Button7: TButton;
c_checkListBox_musicFlags: TCheckListBox;
Label13: TLabel;
Label14: TLabel;
Bevel3: TBevel;
Button8: TButton;
c_label_musicLen: TLabel;
Button9: TButton;
c_trackBar_musicAmp: TTrackBar;
Label16: TLabel;
Label17: TLabel;
c_trackBar_musicPan: TTrackBar;
Label18: TLabel;
c_comboBox_musicChannel: TComboBox;
Label19: TLabel;
c_trackBar_musicChannelVolume: TTrackBar;
Bevel4: TBevel;
c_label_musicPos: TLabel;
a_bass_musicLoad: TAction;
a_bass_musicPlay: TAction;
a_bass_musicUnload: TAction;
a_file_browseMusic: TAction;
a_file_browseLib: TAction;
c_openDialog_music: TOpenDialog;
c_openDialog_lib: TOpenDialog;
Button10: TButton;
a_bass_musicStop: TAction;
c_trackBar_musicPos: TTrackBar;
Button11: TButton;
a_bass_musicLoadMem: TAction;
c_comboBox_cdDrive: TComboBox;
Label15: TLabel;
Button12: TButton;
a_bass_cdInit: TAction;
Button13: TButton;
a_bass_cdFree: TAction;
c_label_cdDrive: TLabel;
Button14: TButton;
Button15: TButton;
a_bass_cdDoorOpen: TAction;
a_bass_cdDoorClose: TAction;
c_memo_cdInfo: TMemo;
c_button_updateCDinfo: TButton;
c_checkBox_cdInDrive: TCheckBox;
Label20: TLabel;
c_comboBox_cdTrack: TComboBox;
Button17: TButton;
Button18: TButton;
Bevel5: TBevel;
a_bass_cdTrackPlay: TAction;
a_bass_cdTrackStop: TAction;
c_checkBox_cdTrackPlayLoop: TCheckBox;
Label21: TLabel;
c_edit_streamPath: TEdit;
Button19: TButton;
a_bass_streamBrowse: TAction;
c_openDialog_stream: TOpenDialog;
c_checkListBox_streamFlags: TCheckListBox;
Button20: TButton;
Button21: TButton;
Button22: TButton;
Button23: TButton;
Button24: TButton;
Label22: TLabel;
Label23: TLabel;
c_listBox_streamModules: TListBox;
Bevel6: TBevel;
a_bass_streamLoad: TAction;
a_bass_streamLoadMem: TAction;
a_bass_streamPlay: TAction;
a_bass_streamStop: TAction;
a_bass_streamUnload: TAction;
c_trackBar_streamPos: TTrackBar;
c_label_streamLength: TLabel;
c_label_streamPos: TLabel;
c_progressBar_streamLevelLeft: TProgressBar;
c_progressBar_streamLevelRight: TProgressBar;
c_timer_levelUpdate: TTimer;
c_progressBar_musicLevelLeft: TProgressBar;
c_progressBar_musicLevelRight: TProgressBar;
PaintBox1: TPaintBox;
Label24: TLabel;
Label25: TLabel;
Label26: TLabel;
//
procedure formCreate(sender: tObject);
procedure formDestroy(sender: tObject);
procedure formShow(sender: tObject);
procedure formCloseQuery(sender: tObject; var canClose: boolean);
//
procedure a_bass_libLoadExecute(Sender: TObject);
procedure a_bass_libUnloadExecute(Sender: TObject);
procedure a_bass_libInitExecute(Sender: TObject);
procedure a_bass_libInfoUpdateExecute(Sender: TObject);
procedure a_bass_actStopExecute(Sender: TObject);
procedure a_bass_actStartExecute(Sender: TObject);
procedure a_bass_actPauseExecute(Sender: TObject);
procedure a_bass_musicLoadExecute(Sender: TObject);
procedure a_file_browseMusicExecute(Sender: TObject);
procedure a_file_browseLibExecute(Sender: TObject);
procedure a_bass_musicPlayExecute(Sender: TObject);
procedure a_bass_musicUnloadExecute(Sender: TObject);
procedure a_bass_musicStopExecute(Sender: TObject);
procedure a_bass_musicLoadMemExecute(Sender: TObject);
procedure a_bass_cdInitExecute(Sender: TObject);
procedure a_bass_cdFreeExecute(Sender: TObject);
procedure a_bass_cdDoorOpenExecute(Sender: TObject);
procedure a_bass_cdDoorCloseExecute(Sender: TObject);
procedure a_bass_cdTrackPlayExecute(Sender: TObject);
procedure a_bass_cdTrackStopExecute(Sender: TObject);
procedure a_bass_streamBrowseExecute(Sender: TObject);
procedure a_bass_streamLoadExecute(Sender: TObject);
procedure a_bass_streamLoadMemExecute(Sender: TObject);
procedure a_bass_streamPlayExecute(Sender: TObject);
procedure a_bass_streamStopExecute(Sender: TObject);
procedure a_bass_streamUnloadExecute(Sender: TObject);
//
procedure c_timer_updateTimer(Sender: TObject);
procedure c_listBox_streamModulesClick(Sender: TObject);
procedure c_edit_streamPathChange(Sender: TObject);
procedure c_trackBar_streamPosChange(Sender: TObject);
procedure c_trackBar_musicPosChange(Sender: TObject);
procedure c_trackBar_musicAmpChange(Sender: TObject);
procedure c_trackBar_musicPanChange(Sender: TObject);
procedure c_trackBar_volumeMusicChange(Sender: TObject);
procedure c_trackBar_volumeSampleChange(Sender: TObject);
procedure c_trackBar_volumeStreamChange(Sender: TObject);
procedure c_trackBar_volumeMasterChange(Sender: TObject);
procedure c_listBox_musicModulesClick(Sender: TObject);
procedure c_trackBar_musicChannelVolumeChange(Sender: TObject);
procedure c_timer_levelUpdateTimer(Sender: TObject);
procedure c_comboBox_cdDriveChange(Sender: TObject);
procedure c_edit_musicFileChange(Sender: TObject);
//
procedure c_button_updateCDinfoClick(Sender: TObject);
procedure Label1Click(Sender: TObject);
procedure Label2Click(Sender: TObject);
procedure Label1MouseEnter(Sender: TObject);
procedure Label1MouseLeave(Sender: TObject);
private
{ Private declarations }
f_caption: string;
f_bass: unaBass;
f_noChangeTrack: bool;
// music
//f_musicBMP: tBitmap;
// cd
f_cdDrive: char;
// stream
//f_streamBMP: tBitmap;
//
f_config: unaIniFile;
//
procedure displayBassInfo();
procedure updateInitParams();
// music
function getSelectedMusic(): unaBassMusic;
function getMusicFlags(): DWORD;
procedure updateMusicInfo(rescanChannels: bool = false);
// cd
procedure enumCD();
function getSelectedCDDrive(): char;
procedure updateCDinfo();
// stream
function getSelectedStream(): unaBassStream;
function getStreamFlags(): DWORD;
procedure updateStreamInfo();
public
{ Public declarations }
end;
var
c_form_main: Tc_form_main;
implementation
{$R *.dfm}
{$R vcBassDemoMem.RES } // music and stream to load from memory
uses
unaBassAPI, unaUtils, unaVCLUtils,
Messages, sysUtils, shellAPI;
//=============== GUI ===================
// -- --
procedure Tc_form_main.Label1Click(Sender: TObject);
begin
shellExecute(0, 'open', 'http://www.un4seen.com/', nil, nil, SW_SHOWNORMAL);
end;
// -- --
procedure Tc_form_main.Label2Click(Sender: TObject);
begin
shellExecute(0, 'open', 'http://www.lakeofsoft.com/', nil, nil, SW_SHOWNORMAL);
end;
// -- --
procedure Tc_form_main.Label1MouseEnter(Sender: TObject);
begin
(sender as tLabel).font.style := [fsUnderline];
end;
// -- --
procedure Tc_form_main.Label1MouseLeave(Sender: TObject);
begin
(sender as tLabel).font.style := [];
end;
// -- --
procedure Tc_form_main.formCreate(Sender: TObject);
begin
f_config := unaIniFile.create();
//
c_checkListBox_initFlags.Checked[3] := true;
c_checkListBox_musicFlags.Checked[9] := true;
c_checkListBox_musicFlags.Checked[12] := true;
c_checkListBox_streamFlags.Checked[5] := true;
//
c_edit_library.text := f_config.get('library', 'bass.dll');
//
f_caption := caption;
a_bass_libLoad.execute();
//
c_edit_musicFileChange(sender);
c_edit_streamPathChange(sender);
//
//
enumCD();
end;
// -- --
procedure Tc_form_main.formShow(sender: tObject);
begin
loadControlPosition(self, f_config);
//
c_label_libVersion.caption := c_label_libVersion.caption + ' (must be a BASS ' +
{$IFDEF BASS_AFTER_21 }
'2.2' +
{$ELSE }
{$IFDEF BASS_AFTER_20 }
'2.1' +
{$ELSE }
{$IFDEF BASS_AFTER_18 }
'2.0' +
{$ELSE }
'1.8' +
{$ENDIF }
{$ENDIF }
{$ENDIF }
' compatible)';
end;
// -- --
procedure Tc_form_main.FormCloseQuery(sender: tObject; var canClose: boolean);
begin
saveControlPosition(self, f_config);
//
f_config.setValue('library', c_edit_library.text);
end;
// -- --
procedure Tc_form_main.formDestroy(Sender: TObject);
begin
a_bass_libUnload.execute();
//
freeAndNil(f_config);
end;
// -- --
procedure Tc_form_main.c_timer_updateTimer(Sender: TObject);
var
cpu: DWORD;
begin
if (nil <> f_bass) then begin
//
cpu := f_bass.get_CPU();
caption := f_caption +
' Mem: ' + int2str(ams() shr 10, 10, 3, ' ') + ' KB / ' +
' CPU: ' + int2str(cpu div 100) + '.' + int2str(cpu mod 100) + '%';
//
updateMusicInfo();
updateStreamInfo();
end
else
caption := f_caption;
end;
// -- --
procedure Tc_form_main.c_timer_levelUpdateTimer(Sender: TObject);
var
lev: DWORD;
music: unaBassMusic;
stream: unaBassStream;
begin
// music levels
music := getSelectedMusic();
if (nil <> music) then begin
// levels
lev := music.asChannel.get_level();
c_progressBar_musicLevelLeft.position := lev and $FFFF;
c_progressBar_musicLevelRight.position := lev shr 16;
end
else begin
c_progressBar_musicLevelLeft.position := 0;
c_progressBar_musicLevelRight.position := 0;
end;
// stream levels
stream := getSelectedStream();
if (nil <> stream) then begin
// levels
lev := stream.asChannel.get_level();
c_progressBar_streamLevelLeft.position := lev and $FFFF;
c_progressBar_streamLevelRight.position := lev shr 16;
end
else begin
c_progressBar_streamLevelLeft.position := 0;
c_progressBar_streamLevelRight.position := 0;
end;
end;
//=============== BASS general ===================
// -- --
procedure Tc_form_main.a_file_browseLibExecute(Sender: TObject);
begin
if (c_openDialog_lib.execute()) then
c_edit_library.text := c_openDialog_lib.fileName;
end;
// -- --
procedure Tc_form_main.a_bass_libLoadExecute(Sender: TObject);
begin
a_bass_libUnload.Execute();
//
f_bass := unaBass.create(c_edit_library.text, {$IFDEF BASS_AFTER_18 }1{$ELSE }-1{$ENDIF }, 44100, 32, handle);
//
displayBassInfo();
updateInitParams();
updateMusicInfo();
//
a_bass_libLoad.enabled := false;
a_bass_libUnload.enabled := true;
a_bass_libInit.enabled := true;
//
a_bass_actStart.enabled := true;
a_bass_actStop.enabled := true;
a_bass_actPause.enabled := true;
//
a_bass_actPause.enabled := true;
a_file_browseLib.enabled := false;
c_edit_library.enabled := false;
//
a_bass_actStart.execute();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -