📄 u_eq_main.pas
字号:
c_label_fileName.caption := f_config.get('input.fileName', '');
c_cb_loop.checked := f_config.get('input.file.loop', false);
//
c_pb_file.visible := inputIsFile and fileExists(c_label_fileName.caption);
c_label_fileName.visible := inputIsFile;
c_cb_loop.visible := inputIsFile;
//
//waveIn.addConsumer(waveFFT.fft);
//waveRiff.addConsumer(waveFFT.fft);
end;
// -- --
procedure Tc_form_main.formDestroy(sender: tObject);
begin
freeAndNil(f_config);
end;
// -- --
procedure Tc_form_main.formCloseQuery(sender: tObject; var canClose: boolean);
begin
c_timer_update.enabled := false;
waveIn.close(); // stop processing
waveRiff.close();
//
f_config.setValue('input.fileName', c_label_fileName.caption);
f_config.setValue('input.file.loop', c_cb_loop.checked);
//
f_config.setValue('input.index', c_cb_source.itemIndex);
f_config.setValue('output.index', c_cb_dest.itemIndex);
//
f_config.setValue('eq.gain.1' , c_tb_01.position);
f_config.setValue('eq.gain.2' , c_tb_02.position);
f_config.setValue('eq.gain.3' , c_tb_03.position);
f_config.setValue('eq.gain.4' , c_tb_04.position);
f_config.setValue('eq.gain.5' , c_tb_05.position);
f_config.setValue('eq.gain.6' , c_tb_06.position);
f_config.setValue('eq.gain.7' , c_tb_07.position);
f_config.setValue('eq.gain.8' , c_tb_08.position);
f_config.setValue('eq.gain.9' , c_tb_09.position);
f_config.setValue('eq.gain.10', c_tb_10.position);
//
f_config.setValue('ps.checked.00', c_cb_00.checked);
f_config.setValue('ps.checked.01', c_cb_01.checked);
f_config.setValue('ps.checked.02', c_cb_02.checked);
f_config.setValue('ps.checked.03', c_cb_03.checked);
f_config.setValue('ps.checked.04', c_cb_04.checked);
f_config.setValue('ps.checked.05', c_cb_05.checked);
f_config.setValue('ps.checked.06', c_cb_06.checked);
f_config.setValue('ps.checked.07', c_cb_07.checked);
f_config.setValue('ps.checked.08', c_cb_08.checked);
f_config.setValue('ps.checked.09', c_cb_09.checked);
f_config.setValue('ps.checked.10', c_cb_10.checked);
//
f_config.setValue('eq.enabled', c_cb_enableEQ.checked);
f_config.setValue('mbsp.enabled', c_cb_enableMBSP.checked);
end;
// -- --
procedure Tc_form_main.c_button_startClick(Sender: TObject);
var
i: int;
begin
c_button_start.enabled := false;
c_button_stop.enabled := true;
//
waveIn.close(); // just in case
waveRiff.close();
//
waveOut.deviceId := index2deviceId(c_cb_dest);
//
changeEQGain();
markPS();
//
f_totalBytes := 0;
f_streamDone := false;
//
i := c_cb_source.itemIndex;
if ((0 <= i) and (pointer($666) = c_cb_source.items.objects[i])) then begin
//
waveRiff.fileName := c_label_fileName.caption;
waveRiff.loop := c_cb_loop.checked;
//
c_pb_file.visible := true;
c_pb_file.max := waveRiff.waveStream.streamSize;
//
waveRiff.open();
end
else begin
//
waveIn.deviceId := index2deviceId(c_cb_source);
waveIn.clearFormatCRC(); // force waveIn to update consumer's format
//
waveIn.open();
end;
//
changeFRQLabels(); // change the labels, since sampling rate may change
//
c_timer_update.enabled := true;
end;
// -- --
procedure Tc_form_main.c_button_stopClick(Sender: TObject);
begin
c_button_start.enabled := true;
c_button_stop.enabled := false;
//
c_timer_update.enabled := false;
//
waveIn.close();
waveRiff.close();
//
c_sb_main.panels[1].text := 'Stopped. ' + c_sb_main.panels[1].text;
end;
// -- --
procedure Tc_form_main.c_tb_change(Sender: TObject);
begin
changeEQGain();
end;
// -- --
procedure Tc_form_main.c_button_resetClick(Sender: TObject);
begin
c_tb_01.position := 0; // no gain
c_tb_02.position := 0;
c_tb_03.position := 0;
c_tb_04.position := 0;
c_tb_05.position := 0;
c_tb_06.position := 0;
c_tb_07.position := 0;
c_tb_08.position := 0;
c_tb_09.position := 0;
c_tb_10.position := 0;
end;
// -- --
procedure Tc_form_main.c_cb_sourceChange(Sender: TObject);
var
i: int;
begin
i := c_cb_source.itemIndex;
if ((0 <= i) and (pointer($666) = c_cb_source.items.objects[i])) then begin
//
if (c_od_file.execute()) then begin
//
if (fileExists(c_od_file.fileName) and (c_label_fileName.caption <> c_od_file.fileName)) then
c_button_stop.click();
//
c_label_fileName.caption := c_od_file.fileName;
end;
//
c_pb_file.visible := fileExists(c_label_fileName.caption);
c_label_fileName.visible := c_pb_file.visible;
c_cb_loop.visible := c_pb_file.visible;
end
else begin
//
c_label_fileName.visible := false;
c_pb_file.visible := false;
c_cb_loop.visible := false;
//
c_button_stop.click();
end;
end;
// -- --
procedure Tc_form_main.c_timer_updateTimer(Sender: TObject);
begin
c_sb_main.panels[1].text := 'Bytes processed: ' + int2str(f_totalBytes, 10, 3);
//
if (c_pb_file.visible) then
c_pb_file.position := waveRiff.waveStream.streamPosition;
//
{$IFDEF DEBUG }
c_sb_main.panels[0].text := 'Mem: ' + int2str(ams() shr 10, 10, 3) + ' KB';
{$ENDIF }
//
if (f_streamDone) then
c_button_stop.click();
end;
// -- --
procedure Tc_form_main.waveRiffStreamIsDone(sender: TObject);
begin
f_streamDone := true;
end;
// -- --
procedure Tc_form_main.passThroughMark(Sender: TObject);
var
checked: bool;
begin
checked := (sender = c_button_all);
c_cb_00.checked := checked;
c_cb_01.checked := checked;
c_cb_02.checked := checked;
c_cb_03.checked := checked;
c_cb_04.checked := checked;
c_cb_05.checked := checked;
c_cb_06.checked := checked;
c_cb_07.checked := checked;
c_cb_08.checked := checked;
c_cb_09.checked := checked;
c_cb_10.checked := checked;
//
markPS();
end;
// -- --
procedure Tc_form_main.changePassThrough(Sender: TObject);
begin
markPS();
end;
// -- --
procedure Tc_form_main.markPS();
begin
// since we need these values in a non main VCL thread, we have to cache them localy
waveDspMBSP.passThrough[00] := c_cb_00.checked;
waveDspMBSP.passThrough[01] := c_cb_01.checked;
waveDspMBSP.passThrough[02] := c_cb_02.checked;
waveDspMBSP.passThrough[03] := c_cb_03.checked;
waveDspMBSP.passThrough[04] := c_cb_04.checked;
waveDspMBSP.passThrough[05] := c_cb_05.checked;
waveDspMBSP.passThrough[06] := c_cb_06.checked;
waveDspMBSP.passThrough[07] := c_cb_07.checked;
waveDspMBSP.passThrough[08] := c_cb_08.checked;
waveDspMBSP.passThrough[09] := c_cb_09.checked;
waveDspMBSP.passThrough[10] := c_cb_10.checked;
end;
// -- --
procedure Tc_form_main.c_cb_loopClick(Sender: TObject);
begin
waveRiff.loop := c_cb_loop.checked;
end;
// -- --
procedure Tc_form_main.waveDspMBSPRawSamplesAvailable(sender: unavclInOutPipe; numSamples, numBands, channel: Cardinal; samples: punaDspBandRawSamples);
begin
case (channel) of
0: waveFFT_left.displayMBSPBands(numBands, punaMBSPBands(samples), numSamples); // left channel
1: waveFFT_right.displayMBSPBands(numBands, punaMBSPBands(samples), numSamples); // right channel
else
// no GUI space for other channel(s) :)
end;
end;
// -- --
procedure Tc_form_main.c_cb_enableEQClick(Sender: TObject);
begin
waveDspEQ.enableDataProcessing := c_cb_enableEQ.checked;
end;
// -- --
procedure Tc_form_main.c_cb_enableMBSPClick(Sender: TObject);
begin
waveDspMBSP.enableDataProcessing := c_cb_enableMBSP.checked;
end;
// -- --
procedure Tc_form_main.waveDspEQDataAvailable(sender: unavclInOutPipe; data: Pointer; len: Cardinal);
begin
inc(f_totalBytes, len);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -