📄 u_vcnettalk_main.pas
字号:
(*
----------------------------------------------
u_vcNetTalk_main.pas
Voice Communicator components version 2.5 Pro
VC NetTalk demo application - main form
----------------------------------------------
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, 01 Jun 2002
modified by:
Lake, Jun-Dec 2002
Lake, Jan-May 2003
----------------------------------------------
*)
{$I unaDef.inc}
unit u_vcNetTalk_main;
interface
uses
Windows, unaTypes, Classes,
Controls, StdCtrls, ComCtrls, ExtCtrls, Forms, ActnList, Dialogs, CheckLst,
unaClasses, unavcIDE;
type
Tc_form_vcNetTalkMain = class(TForm)
c_statusBar_main: TStatusBar;
c_timer_update: TTimer;
waveIn_client: TunavclWaveInDevice;
waveIn_server: TunavclWaveInDevice;
c_actionList_main: TActionList;
a_srvStart: TAction;
a_srvStop: TAction;
a_clientStart: TAction;
a_clientStop: TAction;
ipClient: TunavclIPOutStream;
ipServer: TunavclIPInStream;
waveOut_server: TunavclWaveOutDevice;
waveOut_client: TunavclWaveOutDevice;
codecIn_server: TunavclWaveCodecDevice;
codecOut_client: TunavclWaveCodecDevice;
codecOut_server: TunavclWaveCodecDevice;
codecIn_client: TunavclWaveCodecDevice;
mixer_server: TunavclWaveMixer;
riff_server: TunavclWaveRiff;
mixer_client: TunavclWaveMixer;
riff_client: TunavclWaveRiff;
c_panel_info: TPanel;
c_openDialog_wave: TOpenDialog;
resampler_client: TunavclWaveResampler;
resampler_server: TunavclWaveResampler;
c_pageControl_main: TPageControl;
c_tabSheet_server: TTabSheet;
c_tabSheet_client: TTabSheet;
c_groupBox_server: TGroupBox;
Label1: TLabel;
Bevel1: TBevel;
c_label_statusSrv: TLabel;
c_edit_serverPort: TEdit;
c_button_startServer: TButton;
c_button_stopServer: TButton;
c_checkListBox_server: TCheckListBox;
c_edit_waveNameServer: TEdit;
c_checkBox_mixWaveServer: TCheckBox;
c_button_chooseWaveServer: TButton;
c_groupBox_client: TGroupBox;
Label2: TLabel;
Label3: TLabel;
Bevel2: TBevel;
c_label_statusClient: TLabel;
c_edit_clientSrvHost: TEdit;
c_button_startClient: TButton;
c_button_stopClient: TButton;
c_edit_clientSrvPort: TEdit;
c_checkListBox_client: TCheckListBox;
c_checkBox_mixWaveClient: TCheckBox;
c_edit_waveNameClient: TEdit;
c_button_chooseWaveClient: TButton;
Bevel3: TBevel;
Bevel4: TBevel;
c_checkBox_useWaveInClient: TCheckBox;
c_checkBox_useWaveInServer: TCheckBox;
c_button_formatChooseServer: TButton;
c_static_formatInfoServer: TStaticText;
c_static_formatInfoClient: TStaticText;
c_button_formatChooseClient: TButton;
Label4: TLabel;
Label5: TLabel;
c_staticText_deviceInfoClient: TStaticText;
c_staticText_deviceInfoServer: TStaticText;
c_checkBox_autoStartServer: TCheckBox;
Label6: TLabel;
c_comboBox_socketTypeServer: TComboBox;
Label7: TLabel;
c_comboBox_socketTypeClient: TComboBox;
c_pb_volumeOutClient: TProgressBar;
c_pb_volumeInClient: TProgressBar;
c_pb_volumeOutServer: TProgressBar;
c_pb_volumeInServer: TProgressBar;
Bevel5: TBevel;
Bevel6: TBevel;
//
procedure formCreate(sender: tObject);
procedure formClose(sender: tObject; var action: tCloseAction);
procedure formShow(sender: tObject);
procedure formCloseQuery(sender: tObject; var canClose: boolean);
//
procedure c_timer_updateTimer(Sender: TObject);
procedure c_panel_infoClick(Sender: TObject);
procedure c_button_chooseWaveServerClick(Sender: TObject);
procedure c_button_chooseWaveClientClick(Sender: TObject);
procedure c_button_formatChooseServerClick(Sender: TObject);
procedure c_button_formatChooseClientClick(Sender: TObject);
procedure c_comboBox_socketTypeServerChange(Sender: TObject);
procedure c_comboBox_socketTypeClientChange(Sender: TObject);
//
procedure ipClientClientDisconnect(sender: TObject; connectionId: Cardinal; connected: LongBool);
//
procedure a_srvStartExecute(Sender: TObject);
procedure a_srvStopExecute(Sender: TObject);
procedure a_clientStartExecute(Sender: TObject);
procedure a_clientStopExecute(Sender: TObject);
private
{ Private declarations }
f_hintColorCount: unsigned;
f_hintTextCount: unsigned;
f_ini: unaIniFile;
//
procedure reEnable(server: bool = true);
procedure serverAction(doOpen: bool = true);
procedure clientAction(doOpen: bool = true);
procedure chooseFile(cb: tCheckBox; edit: tEdit);
procedure updateFormat(isServer: bool = true);
procedure updateFormatInfo(isServer: bool = true);
public
{ Public declarations }
end;
var
c_form_vcNetTalkMain: Tc_form_vcNetTalkMain;
implementation
{$R *.dfm}
uses
unaUtils, unaVCLUtils, MMSystem, unaMsAcmAPI, unaWave, unaMsAcmClasses,
shellAPI, Graphics, u_common_audioConfig;
const
hintStrings: array[0..18] of string = (
'',
'Voice Communicator components 2.5 Pro',
'',
'Set of native Borland Delphi classes and VCL components',
'',
'Direct recording and playback functions',
'PCM resampler, volume control and software PCM mixer',
'Supports WAV files reading and writing',
'Easy use of Microsoft ACM codecs',
'Compatible with external MP3 and Ogg/Vorbis encoders',
'Efficient and powerful streaming protocol',
'Powerfull DSP library',
'Best solution for building voice over IP applications',
'Compatible with Borland C++ Builder',
'',
'http://lakeofsoft.com/vc/',
'',
'Click here for more information.',
''
);
hintColors : array[0..7] of tColor = (clBlack, clTeal, clNavy, clNavy, clOlive, clPurple, clTeal, clNavy);
// -- --
procedure Tc_form_vcNetTalkMain.formCreate(sender: tObject);
begin
c_panel_info.color := tColor($F0FBFF);
//
f_ini := unaIniFile.create();
// server
f_ini.section := 'server';
c_comboBox_socketTypeServer.itemIndex := f_ini.get('socketTypeIndex', unsigned(0));
c_edit_serverPort.text := f_ini.get('port', '17810');
c_checkBox_mixWaveServer.Checked := f_ini.get('mixWave', false);
c_edit_waveNameServer.Text := f_ini.get('waveName', '');
c_checkBox_useWaveInServer.Checked := f_ini.get('useWaveIn', true);
c_checkBox_autoStartServer.Checked := f_ini.get('autoStart', true);
//
// client
f_ini.section := 'client';
c_comboBox_socketTypeClient.itemIndex := f_ini.get('socketTypeIndex', unsigned(0));
c_edit_clientSrvHost.text := f_ini.get('serverHost', '192.168.1.1');
c_edit_clientSrvPort.text := f_ini.get('serverPort', '17810');
c_checkBox_mixWaveClient.checked := f_ini.get('mixWave', false);
c_edit_waveNameClient.text := f_ini.get('waveName', '');
c_checkBox_useWaveInClient.checked := f_ini.get('useWaveIn', true);
//
c_comboBox_socketTypeServerChange(nil);
c_comboBox_socketTypeClientChange(nil);
end;
// -- --
procedure Tc_form_vcNetTalkMain.formClose(sender: tObject; var action: tCloseAction);
begin
clientAction(false);
serverAction(false);
//
// server
f_ini.section := 'server';
f_ini.setValue('port', c_edit_serverPort.Text);
f_ini.setValue('socketTypeIndex', c_comboBox_socketTypeServer.ItemIndex);
f_ini.setValue('mixWave', c_checkBox_mixWaveServer.Checked);
f_ini.setValue('waveName', c_edit_waveNameServer.Text);
f_ini.setValue('useWaveIn', c_checkBox_useWaveInServer.Checked);
f_ini.setValue('autoStart', c_checkBox_autoStartServer.Checked);
// client
f_ini.section := 'client';
f_ini.setValue('serverHost', c_edit_clientSrvHost.Text);
f_ini.setValue('serverPort', c_edit_clientSrvPort.Text);
f_ini.setValue('socketTypeIndex', c_comboBox_socketTypeClient.ItemIndex);
f_ini.setValue('mixWave', c_checkBox_mixWaveClient.Checked);
f_ini.setValue('waveName', c_edit_waveNameClient.Text);
f_ini.setValue('useWaveIn', c_checkBox_useWaveInClient.Checked);
end;
// -- --
procedure Tc_form_vcNetTalkMain.formShow(sender: tObject);
begin
loadControlPosition(self, f_ini);
//
c_form_common_audioConfig.setupUI(true);
// server
c_form_common_audioConfig.doLoadConfig(waveIn_server, waveOut_server, codecIn_server, nil, f_ini, 'wave.format.server');
updateFormat();
// client
c_form_common_audioConfig.doLoadConfig(waveIn_client, waveOut_client, codecIn_client, nil, f_ini, 'wave.format.client');
updateFormat(false);
//
if (c_checkBox_autoStartServer.Checked) then
serverAction(true);
//
c_timer_update.enabled := true;
end;
// -- --
procedure Tc_form_vcNetTalkMain.formCloseQuery(sender: tObject; var canClose: boolean);
begin
c_timer_update.enabled := false;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -