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

📄 u_eq_main.pas

📁 Voice Commnucation Components for Delphi
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  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 + -