📄 unitmain.pas
字号:
Show;
end;
MMWaveFile1.Wave.OnProgress := CvtProgressCB;
MMWaveFile1.Wave.ConvertFile(MMWaveOpenDialog1.FileName+'.wav', FmtDialog.PWaveFormat);
finally
FormCvtProgress.Close;
end;
MMWaveFile1.Wave.FreeWave;
MMWaveFile1.Wave.FileName:=MMWaveOpenDialog1.FileName;
if fileexists(MMWaveOpenDialog1.FileName+'.wav') then
begin
renamefile(MMWaveOpenDialog1.FileName,MMWaveOpenDialog1.FileName+'.bak');
renamefile(MMWaveOpenDialog1.FileName+'.wav',MMWaveOpenDialog1.FileName);
MessageDlg('转换成功!原文件改名为.bak',mtInformation, [mbOk], 0);
end
else MessageDlg('转换错误!',mtInformation, [mbOk], 0);
except
MessageDlg('转换错误!',mtError, [mbOk], 0);
end;
end;
Refresh;
end;
{-- TMainForm ------------------------------------------------------------}
procedure TFormMain.ConvertACM;
begin
MMACM1.EnumFormats := efConvert;
if MMACM1.ChooseFormat(MMWaveFile1.Wave.PWaveFormat,'选择目标格式') then
begin
try
with FormCvtProgress do
begin
Gauge1.Progress := 0;
BringToFront;
Show;
end;
MMWaveFile1.Wave.OnProgress := CvtProgressCB;
MMACM1.ConvertFile(MMWaveOpenDialog1.FileName+'.wav');
finally
FormCvtProgress.Close;
end;
MMWaveFile1.Wave.FreeWave;
if fileexists(MMWaveOpenDialog1.FileName+'.wav') then
begin
renamefile(MMWaveOpenDialog1.FileName,MMWaveOpenDialog1.FileName+'.bak');
renamefile(MMWaveOpenDialog1.FileName+'.wav',MMWaveOpenDialog1.FileName);
MessageDlg('转换成功!原文件改名为.bak',mtInformation, [mbOk], 0);
end
else MessageDlg('转换错误!',mtInformation, [mbOk], 0);
end;
Refresh;
end;
procedure TFormMain.ApdTapiDevice1TapiDTMF(CP: TObject; Digit: Char;
ErrorCode: Integer);
var
i:integer;
s:string;
begin
if (Digit = '') or (Digit = ' ') then Exit;
case Digit of
'1'..'9': i:=ord(Digit)-$30;
'0': i:=ord(Digit)-$20;
'*': i:=11;
'#': i:=12;
else exit;
end;
s:=trim(lowercase(FormKeyboard.edit[i].text));
if s='' then exit;
if (pos('.com ',s)<>0)or(pos('.com"',s)<>0)or
(pos('.exe ',s)<>0)or(pos('.exe"',s)<>0)then
WinExec(pchar(s),SW_SHOWNORMAL)
else
ShellExecute(handle,nil,pchar(s),nil,nil,sw_shownormal);
end;
procedure TFormMain.CheckBox2Click(Sender: TObject);
begin
Button7.Enabled:=CheckBox2.checked;
if CheckBox2.Checked then
begin
if not ApdTapiDevice1.EnableVoice then
begin
MessageDlg('没有选择正确的猫.', mtInformation, [mbOk], 0);
end
else begin
try
ApdTapiDevice1.OnTapiFail:=nil;
screen.Cursor:=crHourGlass;
Caller:=false;
CurrentState := StateAnswer;
ApdTapiDevice1.AutoAnswer;
Label4.Caption := '正在侦听';
finally
screen.Cursor:=crDefault;
wait(1000); //等1秒
ApdTapiDevice1.OnTapiFail:=ApdTapiDevice1TapiFail;
end;
end;
end
else begin
try
ApdTapiDevice1.OnTapiFail:=nil;
ApdTapiDevice1.CancelCall;
Label4.Caption := '已经断开';
finally
while ApdTapiDevice1.TapiState <> tsIdle do Application.ProcessMessages;
wait(1000); //等1秒
ApdTapiDevice1.OnTapiFail:=ApdTapiDevice1TapiFail;
end;
end;
if CheckBox2.Checked then reg.writeinteger('AutoAnswer',1)
else reg.writeinteger('AutoAnswer',0);
end;
procedure TFormMain.FormShow(Sender: TObject);
begin
Timer1Busy:=false;
files:=0;
WaveFileDir := ExtractFilePath(ParamStr(0));
SelectDevice_My(ApdTapiDevice1,false,regpath);
ApdTapiDevice1.EnableVoice := True;
if (reg.valueexists('Speeker'))and(reg.readinteger('Speeker')=1)then Monitor.Checked:=true
else Monitor.Checked:=false;
if (reg.valueexists('AnswerRecord'))and(reg.readinteger('AnswerRecord')=1)then CheckBox1.Checked:=true
else CheckBox1.Checked:=false;
if (reg.valueexists('AnswerOnRing')) then edit2.text:=reg.readstring('AnswerOnRing');
if (reg.valueexists('AutoAnswer'))and(reg.readinteger('AutoAnswer')=1)then CheckBox2.Checked:=true
else CheckBox2.Checked:=false;
if (reg.valueexists('InGreet')) then combobox1.text:=reg.readstring('InGreet');
if (reg.valueexists('OutGreet')) then combobox2.text:=reg.readstring('OutGreet');
if (reg.valueexists('AnswerRecordTime')) then MaxLengthEdit.text:=reg.readstring('AnswerRecordTime');
if (reg.valueexists('CallerID')) then CallerID.text:=reg.readstring('CallerID');
ApdTapiDevice1.MonitorRecording := Monitor.Checked;
CheckBox2Click(Sender);
end;
procedure TFormMain.Button8Click(Sender: TObject);
begin
callerid.text:=',';
Button6Click(Sender);
end;
procedure TFormMain.MonitorClick(Sender: TObject);
begin
ApdTapiDevice1.MonitorRecording := Monitor.Checked;
if Monitor.Checked then reg.writeinteger('Speeker',1)
else reg.writeinteger('Speeker',0);
end;
procedure TFormMain.Label3Click(Sender: TObject);
begin
ShellExecute(handle,nil,pchar(label3.caption),nil,nil,sw_shownormal);
end;
procedure TFormMain.Label10Click(Sender: TObject);
begin
ShellExecute(handle,nil,pchar('mailto:'+label10.caption),nil,nil,sw_shownormal);
end;
procedure TFormMain.Timer1Timer(Sender: TObject);
begin
timer1.enabled:=false;
if Timer1Busy then exit; //如果“正忙”,则退出
Timer1Busy:=true; //设置“正忙”
while ApdTapiDevice1.TapiState <> tsIdle do Application.ProcessMessages;
CurrentState := StateIdle;
CheckBox2Click(Sender);
Timer1Busy:=false; //取消“正忙”
end;
procedure TFormMain.ApdTapiDevice1TapiStatus(CP: TObject; First,
Last: Boolean; Device, Message, Param1, Param2, Param3: Cardinal);
{注意:APRO4.x中最好把此两行改成以下
procedure TFormMain.ApdTapiDevice1TapiStatus(CP: TObject; First,
Last: Boolean; Device, Message, Param1, Param2, Param3: longint); }
var
s:string;
begin
if (Message=LINE_CALLSTATE)and(Param1=LINECALLSTATE_OFFERING)and(trim(FormRingDetect.ComboBox1.text)<>'') then
begin
label14.Caption:='铃音';
s:=trim(lowercase(FormRingDetect.combobox1.text));
if s='' then exit;
if (pos('.com ',s)<>0)or(pos('.com"',s)<>0)or
(pos('.exe ',s)<>0)or(pos('.exe"',s)<>0)then
WinExec(pchar(s),SW_SHOWNORMAL)
else
ShellExecute(handle,nil,pchar(s),nil,nil,sw_shownormal);
end;
end;
procedure TFormMain.Button1Click(Sender: TObject);
begin
FormPhoneBook.ShowModal;
if FormPhoneBook.Edit2.text<>'' then
begin
CallerID.text:=FormPhoneBook.Edit2.text;
end;
end;
procedure TFormMain.CallerIDChange(Sender: TObject);
var
slist:TStringList;
i:integer;
begin
CallerID.text:=trim(CallerID.text);
reg.writestring('CallerID',CallerID.text);
slist:=Tstringlist.create;
try
slist.LoadFromFile(WaveFileDir+'PhoneBook2.Dat');
i:=slist.IndexOf(CallerID.text);
if i<>-1 then
begin
slist.LoadFromFile(WaveFileDir+'PhoneBook1.Dat');
CallerIDName.text:=slist.strings[i];
end;
except
MessageDlg('电话号码薄错误.', mtInformation, [mbOk], 0);
end;
slist.free;
end;
procedure TFormMain.Button10Click(Sender: TObject);
begin
files:=0;
Button10.caption:=inttostr(files)+'个录音';
FormPlay.ShowModal;
end;
procedure TFormMain.Button7Click(Sender: TObject);
var
i:integer;
time:dword;
begin
Label14.caption:='';
Button6.Enabled:=false;
Button8.Enabled:=false;
Button7.Enabled:=false;
i:=ApdTapiDevice1.AnswerOnRing;
ApdTapiDevice1.AnswerOnRing:=1;
time:=gettickcount;
while gettickcount-time<3000 do application.ProcessMessages;
ApdTapiDevice1.AnswerOnRing:=i;
Button6.Enabled:=true;
Button8.Enabled:=true;
Button7.Enabled:=CheckBox2.checked;
end;
procedure TFormMain.Edit2Change(Sender: TObject);
var
i:integer;
begin
i:=strtointdef(edit2.text,0);
if edit2.text<>inttostr(i) then edit2.text:=inttostr(i);
ApdTapiDevice1.AnswerOnRing:=i;
reg.writestring('AnswerOnRing',Edit2.text);
end;
procedure TFormMain.CvtProgressCB(Sender: TObject; CurByte, NumBytes: Longint;
Var Cancel: Boolean);
begin
with FormCvtProgress do
begin
Gauge1.Progress := Round((CurByte * 100.0) / NumBytes+0.5);
end;
Cancel := FormCvtProgress.Cancel;
end;
procedure TFormMain.ApdTapiDevice1TapiWaveSilence(CP: TObject;
var StopRecording, Hangup: Boolean);
begin
Label14.caption:='无音';
end;
procedure TFormMain.ApdTapiDevice1TapiWaveBusy(CP: TObject;
var StopRecording, Hangup: Boolean);
begin
Label14.caption:='忙音或对方已挂机';
end;
procedure TFormMain.ApdTapiDevice1TapiWaveRingback(CP: TObject;
var RingbackTimes: Integer; var StopRecording, Hangup: Boolean);
var
i:integer;
begin
Label14.caption:='回铃音';
for i:=1 to RingBackTimes do Label14.caption:=Label14.caption+'.';
if (RingbackTimes>=5) then
begin
StopRecording:=true;
Hangup:=true;
end
else if (RingbackTimes<=0) then
begin
Label14.caption:='';
if fileexists(combobox2.text) then
begin
RecordNextFile:=true;
ApdTapiDevice1.StopWaveRecord;
end
else Label4.Caption := '正在录音';
end;
end;
procedure TFormMain.FormCreate(Sender: TObject);
begin
reg:=Tregistry.create;
reg.rootkey:=HKEY_LOCAL_MACHINE;
reg.openkey(regpath,true);
end;
procedure TFormMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Button9Click(Sender);
ApdTapiDevice1.OnTapiFail:=Nil;
timer1.Enabled:=false;
reg.closekey;
reg.free;
end;
procedure TFormMain.Button3Click(Sender: TObject);
begin
FormKeyboard.ShowModal;
end;
procedure TFormMain.Button5Click(Sender: TObject);
begin
FormAbout.ShowModal;
end;
procedure TFormMain.Button41Click(Sender: TObject);
begin
if MMWaveOpenDialog1.Execute then
begin
combobox1.text:=MMWaveOpenDialog1.FileName;
ComboBox1Change(Sender);
if MessageDlg('选择的wav文件必须是您的声卡所支持的格式,一般是16位8000赫单声PCM,需要转换吗?', mtInformation, [mbyes,mbno], 0)=mrno then exit;
MMWaveFile1.Wave.FileName:='';
MMWaveFile1.Wave.FileName:=MMWaveOpenDialog1.FileName;
if MMACM1.ACMPresent and (MMACM1.NumConverters > 0) then ConvertACM
else ConvertPCM;
end;
end;
procedure TFormMain.Button11Click(Sender: TObject);
begin
if MMWaveOpenDialog1.Execute then
begin
combobox2.text:=MMWaveOpenDialog1.FileName;
ComboBox2Change(Sender);
if MessageDlg('选择的wav文件必须是您的声卡所支持的格式,一般是16位8000赫单声PCM,需要转换吗?', mtInformation, [mbyes,mbno], 0)=mrno then exit;
MMWaveFile1.Wave.FileName:='';
MMWaveFile1.Wave.FileName:=MMWaveOpenDialog1.FileName;
if MMACM1.ACMPresent and (MMACM1.NumConverters > 0) then ConvertACM
else ConvertPCM;
end;
end;
procedure TFormMain.ComboBox1Change(Sender: TObject);
begin
reg.writestring('InGreet',combobox1.text);
end;
procedure TFormMain.ComboBox2Change(Sender: TObject);
begin
reg.writestring('OutGreet',combobox2.text);
end;
procedure TFormMain.ComboBox1Exit(Sender: TObject);
begin
ComboBox1Change(Sender);
end;
procedure TFormMain.ComboBox2Exit(Sender: TObject);
begin
ComboBox2Change(Sender);
end;
procedure TFormMain.Button4Click(Sender: TObject);
begin
FormRingDetect.ShowModal;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -