⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 u_vcbassdemo_main.pas

📁 Voice Commnucation Components for Delphi
💻 PAS
📖 第 1 页 / 共 3 页
字号:

(*
	----------------------------------------------

	  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 + -