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

📄 unitmain.pas

📁 自动语音应答系统
💻 PAS
📖 第 1 页 / 共 2 页
字号:
            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.Button4Click(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.Button5Click(Sender: TObject);
begin
   if OpenDialog2.Execute then
      Edit3.text:=OpenDialog2.FileName;
end;

procedure TFormMain.ApdTapiDevice1TapiDTMF(CP: TObject; Digit: Char;
  ErrorCode: Integer);
begin 
  if (Digit = '') or (Digit = ' ') then Exit;
  case Digit of
  '#': CancelCallClick(Self); 
  '1': WinExec(pchar(edit3.text),SW_SHOWNORMAL); 
  '2': WinExec(pchar(edit4.text),SW_SHOWNORMAL);
  '3': WinExec(pchar(edit5.text),SW_SHOWNORMAL);
  //'4':
  //'5':
  //'6':
  //......  
  end;
end;

procedure TFormMain.CheckBox2Click(Sender: TObject);
var
  reg:tregistry;
begin
  Button10.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;
  reg:=Tregistry.create;
  reg.rootkey:=HKEY_LOCAL_MACHINE;
  reg.openkey(regpath,true);
  if CheckBox2.Checked then reg.writeinteger('AutoAnswer',1)
  else reg.writeinteger('AutoAnswer',0);
  reg.closekey;
  reg.free;
end;

procedure TFormMain.FormShow(Sender: TObject);
var
  reg:tregistry;
begin
   Timer1Busy:=false;
   files:=0;
   WaveFileDir := ExtractFilePath(ParamStr(0)); 

   regpath:='software\www\telephone';
   SelectDevice_My(ApdTapiDevice1,false,regpath); 
   ApdTapiDevice1.EnableVoice := True;

   reg:=Tregistry.create;
   reg.rootkey:=HKEY_LOCAL_MACHINE;
   reg.openkey(regpath,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('Greet')) then combobox1.text:=reg.readstring('Greet');
   if (reg.valueexists('RingToRun')) then combobox2.text:=reg.readstring('RingToRun');   
   if (reg.valueexists('AnswerRecordTime')) then MaxLengthEdit.text:=reg.readstring('AnswerRecordTime');
   if (reg.valueexists('CallerID')) then CallerID.text:=reg.readstring('CallerID');
   if (reg.valueexists('1')) then edit3.text:=reg.readstring('1');
   if (reg.valueexists('2')) then edit4.text:=reg.readstring('2');
   if (reg.valueexists('3')) then edit5.text:=reg.readstring('3');   
   reg.closekey;
   reg.free;

   ApdTapiDevice1.MonitorRecording := Monitor.Checked;  
   CheckBox2Click(Sender); 
end;

procedure TFormMain.Button7Click(Sender: TObject);
begin
   callerid.text:=',';
   Button2Click(Sender);   
end;

procedure TFormMain.MonitorClick(Sender: TObject);
var
   reg:tregistry;
begin
   ApdTapiDevice1.MonitorRecording := Monitor.Checked;  
   reg:=Tregistry.create;
   reg.rootkey:=HKEY_LOCAL_MACHINE;
   reg.openkey(regpath,true);
   if Monitor.Checked then reg.writeinteger('Speeker',1)
   else reg.writeinteger('Speeker',0);
   reg.closekey;
   reg.free;
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.FormClose(Sender: TObject; var Action: TCloseAction);
begin
   CancelCallClick(Sender);
   ApdTapiDevice1.OnTapiFail:=Nil;
   timer1.Enabled:=false;
end;


procedure TFormMain.ApdTapiDevice1TapiStatus(CP: TObject; First,
  Last: Boolean; Device, Message, Param1, Param2, Param3: Cardinal);
var
   s:string;
begin
  if (Message=LINE_CALLSTATE)and(Param1=LINECALLSTATE_OFFERING)and(trim(ComboBox2.text)<>'') then
  begin 
     label14.Caption:='铃音';
     s:=lowercase(combobox2.text);
     if (pos('.com ',s)<>0)or(pos('.com"',s)<>0)or
        (pos('.exe ',s)<>0)or(pos('.exe"',s)<>0)then
        WinExec(pchar(combobox2.text),SW_SHOWNORMAL)
     else 
        ShellExecute(handle,nil,pchar(combobox2.text),nil,nil,sw_shownormal);
  end;
end;

procedure TFormMain.Edit3Exit(Sender: TObject);
var
   reg:tregistry;
begin 
   reg:=Tregistry.create;
   reg.rootkey:=HKEY_LOCAL_MACHINE;
   reg.openkey(regpath,true);
   reg.writestring('1',edit3.text);
   reg.closekey;
   reg.free;
end;

procedure TFormMain.Edit4Exit(Sender: TObject);
var
   reg:tregistry;
begin 
   reg:=Tregistry.create;
   reg.rootkey:=HKEY_LOCAL_MACHINE;
   reg.openkey(regpath,true);
   reg.writestring('2',edit4.text);
   reg.closekey;
   reg.free;
end;

procedure TFormMain.Button3Click(Sender: TObject);
begin 
   FormPhoneBook.ShowModal;
   if FormPhoneBook.Edit2.text<>'' then
   begin
      CallerID.text:=FormPhoneBook.Edit2.text;
   end;
end;

procedure TFormMain.CallerIDChange(Sender: TObject);
var
   reg:tregistry;
   slist:TStringList;
   i:integer;
begin 
   CallerID.text:=trim(CallerID.text);
   reg:=Tregistry.create;
   reg.rootkey:=HKEY_LOCAL_MACHINE;
   reg.openkey(regpath,true);
   reg.writestring('CallerID',CallerID.text);
   reg.closekey;
   reg.free;
   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.Button8Click(Sender: TObject);
begin
   if OpenDialog2.Execute then
      Edit5.text:=OpenDialog2.FileName;
end;

procedure TFormMain.Edit5Exit(Sender: TObject);
var
   reg:tregistry;
begin 
   reg:=Tregistry.create;
   reg.rootkey:=HKEY_LOCAL_MACHINE;
   reg.openkey(regpath,true);
   reg.writestring('3',edit5.text);
   reg.closekey;
   reg.free;
end;

procedure TFormMain.Button9Click(Sender: TObject);
begin
   files:=0;
   Button9.caption:=inttostr(files)+'个录音';
   FormPlay.ShowModal;
end;

procedure TFormMain.Button6Click(Sender: TObject);
begin
   if OpenDialog2.Execute then
      Edit4.text:=OpenDialog2.FileName;
end;

procedure TFormMain.ComboBox1Change(Sender: TObject);
var
   reg:tregistry;
begin 
   reg:=Tregistry.create;
   reg.rootkey:=HKEY_LOCAL_MACHINE;
   reg.openkey(regpath,true);
   reg.writestring('Greet',combobox1.text);
   reg.closekey;
   reg.free;
end;

procedure TFormMain.Button10Click(Sender: TObject);
var
   i:integer;
   time:dword;
begin
   Label14.caption:='';
   Button2.Enabled:=false;
   Button7.Enabled:=false;
   Button10.Enabled:=false;
   i:=ApdTapiDevice1.AnswerOnRing;
   ApdTapiDevice1.AnswerOnRing:=1; 
   time:=gettickcount;
   while gettickcount-time<3000 do application.ProcessMessages;
   ApdTapiDevice1.AnswerOnRing:=i;
   Button2.Enabled:=true;
   Button7.Enabled:=true;
   Button10.Enabled:=CheckBox2.checked;
end;

procedure TFormMain.Button11Click(Sender: TObject);
begin
   if OpenDialog3.Execute then
   begin
      combobox2.text:=OpenDialog3.FileName;
      ComboBox2Change(Sender);
   end;
end;

procedure TFormMain.ComboBox2Change(Sender: TObject);
var
   reg:tregistry;
begin  
   reg:=Tregistry.create;
   reg.rootkey:=HKEY_LOCAL_MACHINE;
   reg.openkey(regpath,true);
   reg.writestring('RingToRun',combobox2.text);
   reg.closekey;
   reg.free;
end;

procedure TFormMain.Edit2Change(Sender: TObject);
var
   reg:tregistry;
   i:integer;
begin  
   i:=strtointdef(edit2.text,0);
   if edit2.text<>inttostr(i) then edit2.text:=inttostr(i);
   ApdTapiDevice1.AnswerOnRing:=i;

   reg:=Tregistry.create;
   reg.rootkey:=HKEY_LOCAL_MACHINE;
   reg.openkey(regpath,true);
   reg.writestring('AnswerOnRing',Edit2.text);
   reg.closekey;
   reg.free;
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:=''; 
   end;
end;

procedure TFormMain.ComboBox2Exit(Sender: TObject);
begin
   ComboBox2Change(Sender);
end;

procedure TFormMain.ComboBox1Exit(Sender: TObject);
begin
   ComboBox1Change(Sender);
end;

end.

⌨️ 快捷键说明

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