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

📄 u_eq_main.pas

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

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

	  u_eq_main.pas - EQ and Multi-band splitter demo main form
	  Voice Communicator components version 2.5 Pro

	----------------------------------------------
	  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, 06 Mar 2007

	  modified by:
		Lake, Mar 2007

	----------------------------------------------
*)

{$I unaDef.inc}

unit
  u_eq_main;

interface

uses
  Windows, unaTypes, unaClasses, 
  Forms, ComCtrls, StdCtrls, Controls, Classes, unaVCIDE, Dialogs, ExtCtrls,
  unaDspControls, unaDspDLibPipes;

const
  //
  c_numBandsEQ	= 10;
  c_numBandsSP	= c_numBandsEQ + 1;	// Splitter usually has one more band

type
  Tc_form_main = class(TForm)
    //
    c_tb_01: TTrackBar;
    c_tb_02: TTrackBar;
    c_tb_03: TTrackBar;
    c_tb_04: TTrackBar;
    c_tb_05: TTrackBar;
    c_tb_06: TTrackBar;
    c_tb_07: TTrackBar;
    c_tb_08: TTrackBar;
    c_tb_09: TTrackBar;
    c_tb_10: TTrackBar;
    //
    Label2: TLabel;
    Label1: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    //
    c_label_fileName: TLabel;
    c_label_frq_1: TLabel;
    c_label_frq_2: TLabel;
    c_label_frq_3: TLabel;
    c_label_frq_4: TLabel;
    c_label_frq_5: TLabel;
    c_label_frq_6: TLabel;
    c_label_frq_7: TLabel;
    c_label_frq_8: TLabel;
    c_label_frq_9: TLabel;
    c_label_frq_10: TLabel;
    //
    c_cb_source: TComboBox;
    c_cb_dest: TComboBox;
    c_cb_loop: TCheckBox;
    //
    c_button_start: TButton;
    c_button_stop: TButton;
    c_button_reset: TButton;
    c_pb_file: TProgressBar;
    //
    c_sb_main: TStatusBar;
    //
    waveIn: TunavclWaveInDevice;
    waveOut: TunavclWaveOutDevice;
    waveRiff: TunavclWaveRiff;
    waveDspEQ: TunavclDSPDLibEQ;
    //
    c_od_file: TOpenDialog;
    c_timer_update: TTimer;
    c_bevel_main: TBevel;
    waveFFT_left: TunadspFFTControl;
    c_cb_01: TCheckBox;
    c_cb_02: TCheckBox;
    c_cb_03: TCheckBox;
    c_cb_04: TCheckBox;
    c_cb_05: TCheckBox;
    c_cb_06: TCheckBox;
    c_cb_07: TCheckBox;
    c_cb_08: TCheckBox;
    c_cb_09: TCheckBox;
    c_cb_10: TCheckBox;
    c_button_all: TButton;
    c_button_none: TButton;
    c_cb_00: TCheckBox;
    Bevel1: TBevel;
    Bevel2: TBevel;
    Bevel3: TBevel;
    Bevel4: TBevel;
    Bevel5: TBevel;
    Bevel6: TBevel;
    Bevel7: TBevel;
    Bevel8: TBevel;
    Bevel9: TBevel;
    Bevel11: TBevel;
    Bevel12: TBevel;
    Bevel10: TBevel;
    waveDspMBSP: TunavclDSPDLibMBSP;
    c_cb_enableEQ: TCheckBox;
    c_cb_enableMBSP: TCheckBox;
    waveFFT_right: TunadspFFTControl;
    //
    procedure formCreate(sender: tObject);
    procedure formDestroy(sender: tObject);
    procedure formCloseQuery(sender: tObject; var canClose: boolean);
    //
    procedure c_button_startClick(Sender: TObject);
    procedure c_button_stopClick(Sender: TObject);
    procedure c_button_resetClick(Sender: TObject);
    //
    procedure c_tb_change(Sender: TObject);
    procedure c_cb_sourceChange(Sender: TObject);
    procedure c_cb_loopClick(Sender: TObject);
    //
    procedure c_timer_updateTimer(Sender: TObject);
    //
    procedure passThroughMark(Sender: TObject);
    procedure changePassThrough(Sender: TObject);
    //
    procedure waveRiffStreamIsDone(sender: TObject);
    procedure waveDspMBSPRawSamplesAvailable(sender: unavclInOutPipe; numSamples, numBands, channel: Cardinal; samples: punaDspBandRawSamples);
    procedure c_cb_enableEQClick(Sender: TObject);
    procedure c_cb_enableMBSPClick(Sender: TObject);
    procedure waveDspEQDataAvailable(sender: unavclInOutPipe; data: Pointer; len: Cardinal);
  private
    { Private declarations }
    f_config: unaIniFile;
    //
    f_totalBytes: int64;
    f_streamDone: bool;
    //
    f_frq_labels: array[0..c_numBandsEQ - 1] of tLabel;
    //
    procedure changeEQGain();
    procedure changeFRQLabels();
    procedure markPS();
  public
    { Public declarations }
  end;

var
  c_form_main: Tc_form_main;


implementation


{$R *.dfm}

uses
  unaUtils, unaVCIDEUtils;


{ Tc_form_main }

// --  --
procedure Tc_form_main.changeEQGain();
begin
  waveDspEQ.gain[00] := -c_tb_01.position;
  waveDspEQ.gain[01] := -c_tb_02.position;
  waveDspEQ.gain[02] := -c_tb_03.position;
  waveDspEQ.gain[03] := -c_tb_04.position;
  waveDspEQ.gain[04] := -c_tb_05.position;
  waveDspEQ.gain[05] := -c_tb_06.position;
  waveDspEQ.gain[06] := -c_tb_07.position;
  waveDspEQ.gain[07] := -c_tb_08.position;
  waveDspEQ.gain[08] := -c_tb_09.position;
  waveDspEQ.gain[09] := -c_tb_10.position;
end;

// --  --
procedure Tc_form_main.changeFRQLabels();
var
  i: int;
  f: float;
begin
  for i := 0 to c_numBandsEQ - 1 do begin
    //
    f := waveDspEQ.frequency[i];
    waveDspMBSP.frequency[i] := f;	// use same frequencies for MBSP
    //
    if (f < 1000) then
      f_frq_labels[i].caption := int2str(trunc(f)) + ' hz'
    else
      f_frq_labels[i].caption := int2str(trunc(f / 1000)) + '.' + int2str( trunc((f / 1000 - trunc(f / 1000)) * 10) ) + ' kHz';
  end;
end;

// --  --
procedure Tc_form_main.formCreate(sender: tObject);
var
  inputIsFile: bool;
begin
  f_config := unaIniFile.create();
  //
  waveDspEQ.numBands := c_numBandsEQ;
  waveDspMBSP.numBands := c_numBandsSP;
  //
  c_tb_01.position := f_config.get('eq.gain.1' , int(0));	// no gain by default
  c_tb_02.position := f_config.get('eq.gain.2' , int(0));
  c_tb_03.position := f_config.get('eq.gain.3' , int(0));
  c_tb_04.position := f_config.get('eq.gain.4' , int(0));
  c_tb_05.position := f_config.get('eq.gain.5' , int(0));
  c_tb_06.position := f_config.get('eq.gain.6' , int(0));
  c_tb_07.position := f_config.get('eq.gain.7' , int(0));
  c_tb_08.position := f_config.get('eq.gain.8' , int(0));
  c_tb_09.position := f_config.get('eq.gain.9' , int(0));
  c_tb_10.position := f_config.get('eq.gain.10', int(0));
  //
  f_frq_labels[0] := c_label_frq_1;
  f_frq_labels[1] := c_label_frq_2;
  f_frq_labels[2] := c_label_frq_3;
  f_frq_labels[3] := c_label_frq_4;
  f_frq_labels[4] := c_label_frq_5;
  f_frq_labels[5] := c_label_frq_6;
  f_frq_labels[6] := c_label_frq_7;
  f_frq_labels[7] := c_label_frq_8;
  f_frq_labels[8] := c_label_frq_9;
  f_frq_labels[9] := c_label_frq_10;
  //
  changeFRQLabels();
  //
  c_cb_00.checked := f_config.get('ps.checked.00', true);
  c_cb_01.checked := f_config.get('ps.checked.01', true);
  c_cb_02.checked := f_config.get('ps.checked.02', true);
  c_cb_03.checked := f_config.get('ps.checked.03', true);
  c_cb_04.checked := f_config.get('ps.checked.04', true);
  c_cb_05.checked := f_config.get('ps.checked.05', true);
  c_cb_06.checked := f_config.get('ps.checked.06', true);
  c_cb_07.checked := f_config.get('ps.checked.07', true);
  c_cb_08.checked := f_config.get('ps.checked.08', true);
  c_cb_09.checked := f_config.get('ps.checked.09', true);
  c_cb_10.checked := f_config.get('ps.checked.10', true);
  //
  c_cb_enableEQ.checked := f_config.get('eq.enabled', true);
  c_cb_enableMBSP.checked := f_config.get('mbsp.enabled', true);
  waveDspEQ.enableDataProcessing := c_cb_enableEQ.checked;
  waveDspMBSP.enableDataProcessing := c_cb_enableMBSP.checked;
  //
  enumWaveDevices(c_cb_source, true, false);
  enumWaveDevices(c_cb_dest, false, false);
  //
  c_cb_source.items.addObject('Load audio from a *.WAV file...', pointer($666));
  //
  c_cb_source.itemIndex := f_config.get('input.index', int(0));
  c_cb_dest.itemIndex := f_config.get('output.index', int(0));
  //
  inputIsFile := ((0 <= c_cb_source.itemIndex) and (pointer($666) = c_cb_source.items.objects[c_cb_source.itemIndex]));
  //

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -