📄 u_eq_main.pas
字号:
(*
----------------------------------------------
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 + -