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

📄 u_vc2demo_main.pas

📁 Voice Commnucation Components for Delphi
💻 PAS
📖 第 1 页 / 共 2 页
字号:
      f_mixer.addConsumer(f_riffOut);
    end;
    f_playback.open();
    f_mixer.open();
  end;
  //
  reEnable(f_playback);
end;

// --  --
procedure Tc_form_vc2DemoMain.ac_chooseOutExecute(Sender: TObject);
var
  format: pWAVEFORMATEX;
begin
  new(format);
  fillPCMFormat(format^, f_waveOutFormat.pcmSamplesPerSecond, f_waveOutFormat.pcmBitsPerSample, f_waveOutFormat.pcmNumChannels);
  if (mmNoError(f_playback.formatChoose(format, 'Choose playback format'))) then begin
    //
    f_waveOutFormat.pcmSamplesPerSecond := format.nSamplesPerSec;
    f_waveOutFormat.pcmBitsPerSample := format.wBitsPerSample;
    f_waveOutFormat.pcmNumChannels := format.nChannels;
    //
    f_playback.setSampling(format^);
    f_mixer.setSampling(format^);
    c_staticText_outFormat.Caption := f_playback.srcFormatInfo;
  end;
  dispose(format);
end;

// --  --
procedure Tc_form_vc2DemoMain.ac_closeOutExecute(Sender: TObject);
begin
  f_channels.clear(1);
  f_mixer.close();
  f_playback.close();
  freeAndNil(f_riffOut);
  freeAndNil(f_inOutResampler);
  //
  reEnable(f_playback);
end;

// --  --
procedure Tc_form_vc2DemoMain.ac_openInExecute(Sender: TObject);
var
  format: WAVEFORMATEX;
  formatOut: WAVEFORMATEX;
begin
  if (not f_recorder.isOpen()) then begin
    f_recorder.deviceId := unsigned(int(c_comboBox_recordingDevice.items.objects[c_comboBox_recordingDevice.itemIndex]) - 10);
    //f_recorder.mapped := c_checkBox_inMapped.checked;
    //f_recorder.direct := c_checkBox_inDirect.checked;
    //
    fillPCMFormat(format, f_waveInFormat.pcmSamplesPerSecond, f_waveInFormat.pcmBitsPerSample, f_waveInFormat.pcmNumChannels);
    //
    if (c_checkBox_loop2Playback.checked) then begin
      // loop recording to playback (through resampler)
      fillPCMFormat(formatOut, f_waveOutFormat.pcmSamplesPerSecond, f_waveOutFormat.pcmBitsPerSample, f_waveOutFormat.pcmNumChannels);
      //
      f_inOutResampler := unaWaveResampler.create(false);
      with (f_inOutResampler) do begin
	setSampling(true, format);
	setSampling(false, formatOut);
	onDataAvailable := myOnDA;
	assignStream(false, nil);
      end;
      //
      f_recorder.addConsumer(f_inOutResampler);
      //
      f_inOutStream := mixer.addStream();
      //
      f_inOutResampler.open();
    end;
    //
    if (c_checkBox_saveIn2File.Checked) then begin
      //
      f_riffIn := unaRiffStream.createNew(f_waveInFile, format);
      f_riffIn.open();
      f_recorder.addConsumer(f_riffIn);
    end;
    f_recorder.open();
  end;
  //
  reEnable(f_recorder);
end;

// --  --
procedure Tc_form_vc2DemoMain.ac_closeInExecute(Sender: TObject);
begin
  f_recorder.close();
  freeAndNil(f_inOutResampler);
  freeandNil(f_riffIn);
  //
  if (nil <> f_inOutStream) then
    mixer.removeStream(f_inOutStream);
  //
  f_inOutStream := nil;
  //
  reEnable(f_recorder);
end;

// --  --
procedure Tc_form_vc2DemoMain.ac_chooseInExecute(Sender: TObject);
var
  format: pWAVEFORMATEX;
begin
  new(format);
  fillPCMFormat(format^, f_waveInFormat.pcmSamplesPerSecond, f_waveInFormat.pcmBitsPerSample, f_waveInFormat.pcmNumChannels);
  if (mmNoError(f_recorder.formatChoose(format, 'Choose recording format'))) then begin
    //
    f_waveInFormat.pcmSamplesPerSecond := format.nSamplesPerSec;
    f_waveInFormat.pcmBitsPerSample := format.wBitsPerSample;
    f_waveInFormat.pcmNumChannels := format.nChannels;
    //
    f_recorder.setSampling(format^);
    c_staticText_inFormat.Caption := f_recorder.dstFormatInfo;
  end;
  dispose(format);
end;

// --  --
procedure Tc_form_vc2DemoMain.c_timer_updateTimer(Sender: TObject);
begin
  c_statusBar_main.Panels[0].Text := 'Mem: ' + int2Str(ams() shr 10, 10, 3) + ' KB';
  //
  updateVolume(f_playback);
  updateVolume(f_recorder);
  //
  inc(f_hintColorCount);
  inc(f_hintTextCount, 3);
end;

// --  --
procedure Tc_form_vc2DemoMain.ac_addChannelExecute(Sender: TObject);
var
  channel: Tc_form_playbackChannel;
begin
  channel := Tc_form_playbackChannel.create(nil);
  channel.Top := channel.Top + int(f_channels.count) * 20;
  channel.Left := channel.Left + int(f_channels.count) * 20;
  channel.c_groupBox_main.Caption := ' Channel #' + int2Str(f_channels.count) + ' ';
  f_channels.Add(channel);
  channel.Show();
end;

// --  --
procedure Tc_form_vc2DemoMain.updateVolume(device: unaWaveDevice);
var
  posLeft: unsigned;
  posRight: unsigned;
begin
  if (nil <> device) then begin
    //
    if (device.isOpen) then begin
      posLeft := device.getVolume(0);
      posRight := device.getVolume(1);
    end
    else begin
      posLeft := 0;
      posRight := 0;
    end;
    //
    if (device is unaWaveOutDevice) then begin
      //
      c_progressBar_outLeft.position := waveGetLogVolume(posLeft);
      c_progressBar_outRight.position := waveGetLogVolume(posRight);
    end
    else begin
      //
      c_progressBar_inLeft.Position := waveGetLogVolume(posLeft);
      c_progressBar_inRight.Position := waveGetLogVolume(posRight);
    end;
    //
  end;
end;

// --  --
procedure Tc_form_vc2DemoMain.reEnable(device: unaWaveDevice);
var
  isOpen: bool;
begin
  isOpen := device.isOpen();
  if (device is unaWaveOutDevice) then begin
    //
    ac_openOut.Enabled := not isOpen;
    ac_closeOut.Enabled := isOpen;
    ac_chooseOut.Enabled := not isOpen;
    ac_addChannel.Enabled := isOpen;
    c_comboBox_playbackDevice.Enabled := not isOpen;
    //c_checkBox_outDirect.Enabled := not isOpen;
    //c_checkBox_outMapped.Enabled := not isOpen;
    c_checkBox_saveOut2File.Enabled := not isOpen;
    c_edit_waveOutFile.Enabled := not isOpen;
    c_speedButton_outFileOpen.Enabled := not isOpen;
    c_checkBox_loop2Playback.Enabled := isOpen and not f_recorder.isOpen();
    if (not c_checkBox_loop2Playback.Enabled) then
      c_checkBox_loop2Playback.Checked := false;
  end
  else begin
    //
    ac_openIn.Enabled := not isOpen;
    ac_closeIn.Enabled := isOpen;
    ac_chooseIn.Enabled := not isOpen;
    c_comboBox_recordingDevice.Enabled := not isOpen;
    //c_checkBox_inDirect.Enabled := not isOpen;
    //c_checkBox_inMapped.Enabled := not isOpen;
    c_checkBox_saveIn2File.Enabled := not isOpen;
    c_edit_waveInFile.Enabled := not isOpen;
    c_speedButton_inFileOpen.Enabled := not isOpen;
    c_checkBox_loop2Playback.Enabled := not isOpen and f_playback.isOpen();
  end;
end;

// --  --
procedure Tc_form_vc2DemoMain.c_comboBox_playbackDeviceChange(Sender: TObject);
begin
  f_waveOutDeviceId := unsigned(c_comboBox_playbackDevice.ItemIndex - 1);
end;

// --  --
procedure Tc_form_vc2DemoMain.c_comboBox_recordingDeviceChange(Sender: TObject);
begin
  f_waveInDeviceId := unsigned(c_comboBox_recordingDevice.ItemIndex - 1);
end;

// --  --
procedure Tc_form_vc2DemoMain.c_speedButton_outFileOpenClick(Sender: TObject);
begin
  if (c_saveDialog_main.Execute) then begin
    //
    f_waveOutFile := c_saveDialog_main.FileName;
    c_edit_waveOutFile.Text := f_waveOutFile;
    ini.section := 'main';
    ini.setValue('initialSaveDir', extractFilePath(f_waveOutFile));
  end;
end;

// --  --
procedure Tc_form_vc2DemoMain.c_edit_waveOutFileChange(Sender: TObject);
begin
  f_waveOutFile := c_edit_waveOutFile.Text;
  c_checkBox_saveOut2File.Checked := ('' <> trim(f_waveOutFile));
end;

// --  --
procedure Tc_form_vc2DemoMain.c_speedButton_inFileOpenClick(Sender: TObject);
begin
  if (c_saveDialog_main.Execute) then begin
    //
    f_waveInFile := c_saveDialog_main.FileName;
    c_edit_waveInFile.Text := f_waveInFile;
    ini.section := 'main';
    ini.setValue('initialSaveDir', extractFilePath(f_waveInFile));
  end;
end;

// --  --
procedure Tc_form_vc2DemoMain.c_edit_waveInFileChange(Sender: TObject);
begin
  f_waveInFile := c_edit_waveInFile.Text;
  c_checkBox_saveIn2File.Checked := ('' <> f_waveInFile);
end;

// --  --
procedure Tc_form_vc2DemoMain.myOnDA(sender: tObject; data: pointer; size: unsigned);
begin
  // put data from resampler to stream
  if (nil <> f_inOutStream) then
    f_inOutStream.write(data, size);
end;

// --  --
procedure Tc_form_vc2DemoMain.c_checkBox_saveOut2FileClick(Sender: TObject);
begin
  if (c_checkBox_saveOut2File.Checked and ('' = trim(c_edit_waveOutFile.Text))) then begin
    //
    c_checkBox_saveOut2File.Checked := false;
    c_speedButton_outFileOpenClick(nil);
  end;
end;

// --  --
procedure Tc_form_vc2DemoMain.c_checkBox_saveIn2FileClick(Sender: TObject);
begin
  if (c_checkBox_saveIn2File.Checked and ('' = trim(c_edit_waveInFile.Text))) then begin
    //
    c_checkBox_saveIn2File.Checked := false;
    c_speedButton_inFileOpenClick(nil);
  end;
end;

procedure Tc_form_vc2DemoMain.c_panel_infoClick(Sender: TObject);
begin
  ShellExecute(0, 'open', 'http://www.lakeofsoft.com/vc', nil, nil, SW_SHOWNORMAL);
end;


end.

⌨️ 快捷键说明

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