www.pudn.com > telephonefordelphi.rar > UnitMain.pas
unit UnitMain;
interface
uses
WinTypes,shellapi,
WinProcs,
Messages,
SysUtils,
Classes,
Graphics,
Controls,
Forms,
Dialogs,
StdCtrls,
ExtCtrls,registry,
Menus,AdTapi,
AdTutil,
AdPort, OoMisc,AdTSel_My, AdTStat, MMHook, MMDesign,
MMObj, MMACMDlg, MMDSPObj, MMWave, MMCstDlg;
const
RegPath='SOFTWARE\www\Telephone';
CurrentState : Integer = 0;
StateGreeting = 0;
StateRecording = 1;
StateIdle = 2;
StateBeeping = 3;
StatePlayback = 4;
StateDial = 5;
StateDialing = 6;
StateAnswer = 7;
type
TFormMain = class(TForm)
Label1: TLabel;
Label2: TLabel;
CallerID: TEdit;
CallerIDName: TEdit;
Button2: TButton;
Button9: TButton;
GroupBox1: TGroupBox;
Label4: TLabel;
Label5: TLabel;
MaxLengthEdit: TEdit;
Monitor: TCheckBox;
ApdComPort1: TApdComPort;
Button6: TButton;
Label6: TLabel;
Button41: TButton;
CheckBox1: TCheckBox;
CheckBox2: TCheckBox;
Edit2: TEdit;
Label7: TLabel;
Button8: TButton;
Label3: TLabel;
Label10: TLabel;
Label11: TLabel;
ApdTapiDevice1: TApdTapiDevice;
Timer1: TTimer;
Button1: TButton;
Button10: TButton;
ComboBox1: TComboBox;
Button7: TButton;
MMACM1: TMMACM;
MMDesigner1: TMMDesigner;
MMWaveFile1: TMMWaveFile;
MMWaveOpenDialog1: TMMWaveOpenDialog;
ApdTapiLog1: TApdTapiLog;
Label14: TLabel;
Button3: TButton;
Button5: TButton;
Button4: TButton;
Label8: TLabel;
ComboBox2: TComboBox;
Button11: TButton;
procedure CvtProgressCB(Sender: TObject; CurByte, NumBytes: Longint;
Var Cancel: Boolean);
procedure ConvertPCM;
procedure ConvertACM;
procedure Button2Click(Sender: TObject);
procedure Button9Click(Sender: TObject);
procedure ApdTapiDevice1TapiConnect(Sender: TObject);
procedure ApdTapiDevice1TapiWaveNotify(CP: TObject; Msg: TWaveMessage);
procedure ApdTapiDevice1TapiCallerID(CP: TObject; ID, IDName: String);
procedure MaxLengthEditExit(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure CheckBox1Click(Sender: TObject);
procedure ApdTapiDevice1TapiFail(Sender: TObject);
procedure Button41Click(Sender: TObject);
procedure ApdTapiDevice1TapiDTMF(CP: TObject; Digit: Char;
ErrorCode: Integer);
procedure CheckBox2Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure MonitorClick(Sender: TObject);
procedure Label3Click(Sender: TObject);
procedure Label10Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure ApdTapiDevice1TapiStatus(CP: TObject; First, Last: Boolean;
Device, Message, Param1, Param2, Param3: Cardinal);
{注意:APRO4.x中最好把此两行改成以下
procedure ApdTapiDevice1TapiStatus(CP: TObject; First,
Last: Boolean; Device, Message, Param1, Param2, Param3: longint); }
procedure Button1Click(Sender: TObject);
procedure CallerIDChange(Sender: TObject);
procedure Button10Click(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Edit2Change(Sender: TObject);
procedure ApdTapiDevice1TapiWaveSilence(CP: TObject; var StopRecording,
Hangup: Boolean);
procedure ApdTapiDevice1TapiWaveRingback(CP: TObject;
var RingbackTimes: Integer; var StopRecording, Hangup: Boolean);
procedure ApdTapiDevice1TapiWaveBusy(CP: TObject; var StopRecording,
Hangup: Boolean);
procedure ComboBox1Exit(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button11Click(Sender: TObject);
procedure ComboBox2Change(Sender: TObject);
procedure ComboBox2Exit(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
RecordNextFile:boolean;
FileName : String;
files:integer;
caller:boolean;
Timer1Busy:boolean; //Timer1是否重新进入
public
Reg:TRegistry;
WaveFileDir : String;
{ Public declarations }
end;
var
FormMain: TFormMain;
implementation
uses UnitFmtDialog,UnitPlay, UnitCvtProgress, UnitPhoneBook,
UnitPhoneKeyboard, UnitRingDetect, UnitAbout;
{$R *.DFM}
procedure wait(msec:dword);
var
t:DWORD;
begin
t:=gettickcount;
while gettickcount-t tsIdle do Application.ProcessMessages;
wait(1000); //等1秒
ApdTapiDevice1.OnTapiFail:=ApdTapiDevice1TapiFail;
end;
Label4.Caption := '已经断开';
Button6.Enabled:=true;
Button8.Enabled:=true;
Button7.Enabled:=CheckBox2.checked;
timer1.enabled:=true;
end;
procedure TFormMain.ApdTapiDevice1TapiConnect(Sender: TObject);
var
WaveFile:string;
begin
if CurrentState = StateDial then
begin
Label4.Caption := '建立连接';
CurrentState := StateDialing;
WaveFile:=WaveFileDir+'静音.wav';
try
ApdTapiDevice1.PlayWaveFile(WaveFile);
except
MessageDlg('播放文件错误:'+WaveFile,mtInformation, [mbOk], 0);
end;
end
else if CurrentState = StateAnswer then
begin
CurrentState := StateGreeting;
Label4.Caption := '播放问候语';
WaveFile:=combobox1.text;
if not fileexists(WaveFile) then WaveFile:=WaveFileDir+'静音.wav';
try
ApdTapiDevice1.PlayWaveFile(WaveFile);
except
MessageDlg('播放文件错误:'+WaveFile,mtInformation, [mbOk], 0);
end;
end
else
caption:=inttostr(currentstate);
end;
procedure TFormMain.ApdTapiDevice1TapiWaveNotify(CP: TObject;
Msg: TWaveMessage);
var
datetime : TDateTime;
year,month,day,hour,min,sec,msec : word;
max : integer;
sr : TSearchRec;
begin
if (CurrentState = StateDialing)or(CurrentState = StateDial) then
begin
case Msg of
waPlayClose :
begin
ApdTapiDevice1.MaxMessageLength :=60*60;
try
ApdTapiDevice1.StartWaveRecord;
if RecordNextFile then //是否是第二个文件
begin
Label4.caption:='正在录音';
RecordNextFile:=false;
end;
except
end;
end;
waDataReady:
begin
datetime:=now;
decodedate(datetime,year,month,day);
decodetime(datetime,hour,min,sec,msec);
if callerid.text=',' then
FileName := WaveFileDir+Format('%.2d-%.2d-%.2d %.2d:%.2d:%.2d',[year,month,day,hour,min,sec])+'录音.wav'
else FileName := WaveFileDir+Format('%.2d-%.2d-%.2d %.2d:%.2d:%.2d',[year,month,day,hour,min,sec])+'拨打'+callerid.text+'.wav';
ApdTapiDevice1.SaveWaveFile(FileName, True);
end;
waRecordClose :
begin
if RecordNextFile then //是否播放第二个文件
begin
DeleteFile(FileName);
try
ApdTapiDevice1.PlayWaveFile(combobox2.text); //播放第二个文件
Label4.caption:='播放问候语';
except
MessageDlg('播放文件错误:'+combobox2.text,mtInformation, [mbOk], 0);
end;
end
else begin //没有第二个播放文件
Button9Click(Self);
if findfirst(FileName,faAnyfile and not faDirectory,sr)=0 then
begin
if (sr.Size<=110*1024)or
(pos('回铃音.....',Label14.caption)=1) then
deletefile(FileName)
else begin
inc(files);
Button10.caption:=inttostr(files)+'个录音';
end;
end;
end;
end;
end;
end
else begin
case Msg of
waPlayClose :
case CurrentState of
StateGreeting :
begin
CurrentState := StateBeeping;
try
ApdTapiDevice1.PlayWaveFile(WaveFileDir+'beep.wav');
except
MessageDlg('播放文件错误:'+'beep.wav',mtInformation, [mbOk], 0);
end;
end;
StateBeeping :
begin
CurrentState := StateRecording;
if CheckBox1.Checked then max:=strtointdef(MaxLengthEdit.Text,60*60)
else max:=60*60;
ApdTapiDevice1.MaxMessageLength :=max;
try
ApdTapiDevice1.StartWaveRecord;
Label4.caption:='正在录音';
except
end;
end;
end;
waDataReady :
begin
datetime:=now;
decodedate(datetime,year,month,day);
decodetime(datetime,hour,min,sec,msec);
if not caller then callerid.text:='';
FileName := WaveFileDir+Format('%.2d-%.2d-%.2d %.2d:%.2d:%.2d',[year,month,day,hour,min,sec])
+'接听'+callerid.text+'.wav';
ApdTapiDevice1.SaveWaveFile(FileName, True);
end;
waRecordClose :
begin
Button9Click(Self);
inc(files);
Button10.caption:=inttostr(files)+'个录音';
end;
end;
end;
end;
procedure TFormMain.ApdTapiDevice1TapiCallerID(CP: TObject; ID,
IDName: String);
begin
CallerId.Text := ID;
CallerIdName.Text := IDName;
Caller:=true;
end;
procedure TFormMain.MaxLengthEditExit(Sender: TObject);
begin
reg.writestring('AnswerRecordTime',MaxLengthEdit.text);
end;
procedure TFormMain.Button6Click(Sender: TObject);
begin
Label14.caption:='';
if not ApdTapiDevice1.EnableVoice then
begin
MessageDlg('没有选择正确的猫.', mtInformation, [mbOk], 0);
exit;
end;
callerid.text:=trim(callerid.text);
if callerid.text<>'' then
begin
try
ApdTapiDevice1.OnTapiFail:=nil;
ApdTapiDevice1.CancelCall;
finally
while ApdTapiDevice1.TapiState <> tsIdle do Application.ProcessMessages;
wait(1000); //等1秒
ApdTapiDevice1.OnTapiFail:=ApdTapiDevice1TapiFail;
end;
Button6.Enabled:=false;
Button8.Enabled:=false;
Button7.Enabled:=false;
RecordNextFile:=false; //是否播放第二个文件
Label4.Caption := '正在拨号';
CurrentState := StateDial;
ApdTapiDevice1.Dial(callerid.text);
end
else MessageDlg('请输入电话号码.', mtInformation, [mbOk], 0);
end;
procedure TFormMain.CheckBox1Click(Sender: TObject);
begin
MaxLengthEdit.Enabled:=CheckBox1.Checked;
if CheckBox1.Checked then reg.writeinteger('AnswerRecord',1)
else reg.writeinteger('AnswerRecord',0);
end;
procedure TFormMain.ApdTapiDevice1TapiFail(Sender: TObject);
begin
CurrentState := StateIdle;
Label4.Caption := '已经断开';
Button6.Enabled:=true;
Button8.Enabled:=true;
Button7.Enabled:=CheckBox2.checked;
if CurrentState = StateAnswer then CheckBox2.checked:=false
else timer1.enabled:=true;
end;
procedure TFormMain.ConvertPCM;
begin
FmtDialog.Wave := MMWaveFile1.Wave;
if (FmtDialog.ShowModal = mrOk) then
begin
try
try
with FormCvtProgress do
begin
Gauge1.Progress := 0;
BringToFront;
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.