📄 adsapiph.pas
字号:
SpokenData : string);
procedure AskForExtensionTrigger (Reply : TApdSapiPhoneReply;
Data : Pointer;
SpokenData : string);
procedure AskForListTrigger (Reply : TApdSapiPhoneReply;
Data : Pointer;
SpokenData : string);
procedure AskForPhoneNumberTrigger (Reply : TApdSapiPhoneReply;
Data : Pointer;
SpokenData : string);
procedure AskForSpellingTrigger (Reply : TApdSapiPhoneReply;
Data : Pointer;
SpokenData : string);
procedure AskForTimeTrigger (Reply : TApdSapiPhoneReply;
Data : Pointer;
SpokenData : string);
procedure AskForYesNoTrigger (Reply : TApdSapiPhoneReply;
Data : Pointer;
SpokenData : string);
function ConvertResponse (RCode : Integer ) : TApdSapiPhoneReply;
procedure DoLineCallState (Device, P1, P2, P3 : LongInt); override;
procedure ExitAskFor (Reply : TApdSapiPhoneReply;
Data : Pointer;
SpokenData : string);
function GetPhraseData (LParam : Longint) : string;
function FixNumerics (Phrase : string) : string;
function InterpretDate (Phrase : string;
var Trusted : Boolean) : TDateTime; virtual;
function InterpretPhoneNumber (Phrase : string) : string;
function InterpretTime (Phrase : string) : TDateTime; virtual;
procedure Notification(AComponent : TComponent; Operation: TOperation);
override;
procedure PhraseHandler (var Msg : TMessage); message apw_SapiInfoPhrase;
procedure SapiPhoneCallback (var Msg : TMessage);
message apw_SapiPhoneCallBack;
procedure SetNoAnswerMax (v : Integer);
procedure SetNoAnswerTime (v : Integer);
procedure SetNumDigits (v : Integer);
procedure SetOptions (v : TApdSapiPhoneSettings);
procedure SetSpellingEchoBack (v : Boolean);
procedure UpdateStateMachine (LastReply : TApdPhraseType;
LastRule : Integer;
LastPhrase : string);
public
constructor Create (AOwner : TComponent); override;
destructor Destroy; override;
procedure AbortAskFor;
procedure AskForDate (NewPrompt1 : string);
procedure AskForDateEx (NewPrompt1 : string; NewPrompt2 : string;
NewHelp1 : string; NewHelp2 : string;
NewWhere1 : string;
NewWhere2 : string);
procedure AskForExtension (NewPrompt1 : string);
procedure AskForExtensionEx (NewPrompt1 : string; NewPrompt2 : string;
NewTooManyDigits : string;
NewTooFewDigits : string;
NewNumDigits : Integer;
NewHelp1 : string;
NewHelp2 : string;
NewWhere1 : string;
NewWhere2 : string);
procedure AskForList (List : TStringList;
NewPrompt1 : string);
procedure AskForListEx (List : TStringList;
NewPrompt1 : string; NewPrompt2 : string;
NewHelp1 : string; NewHelp2 : string;
NewWhere1 : string;
NewWhere2 : string);
procedure AskForPhoneNumber (NewPrompt1 : string);
procedure AskForPhoneNumberEx (NewPrompt1 : string;
NewPrompt2 : string;
NewAskAreaCode : string;
NewAskNextThree : string;
NewAskLastFour : string;
NewHelp1 : string;
NewHelp2 : string;
NewWhere1 : string;
NewWhere2 : string);
procedure AskForSpelling (NewPrompt1 : string);
procedure AskForSpellingEx (NewPrompt1 : string;
NewPrompt2 : string;
NewHelp1 : string;
NewHelp2 : string;
NewWhere1 : string;
NewWhere2 : string);
procedure AskForTime (NewPrompt1 : string);
procedure AskForTimeEx (NewPrompt1 : string; NewPrompt2 : string;
NewHelp1 : string; NewHelp2 : string;
NewWhere1 : string;
NewWhere2 : string);
procedure AskForYesNo (NewPrompt1 : string);
procedure AskForYesNoEx (NewPrompt1 : string;
NewPrompt2 : string;
NewHelp1 : string; NewHelp2 : string;
NewWhere1 : string;
NewWhere2 : string);
procedure SetDefaultPrompts (NewPrompt1 : string; NewPrompt2 : string;
NewHelp1 : string; NewHelp2 : string;
NewWhere1 : string; NewWhere2 : string);
procedure Speak (const Text : string);
property Prompts : TApdSapiPhonePrompts read FPrompts write FPrompts;
published
property NoAnswerMax : Integer read FNoAnswerMax write SetNoAnswerMax;
property NoAnswerTime : Integer read FNoAnswerTime write SetNoAnswerTime;
property NumDigits : Integer read FNumDigits write SetNumDigits;
property Options : TApdSapiPhoneSettings read FOptions write SetOptions;
property SapiEngine : TApdCustomSapiEngine
read FSapiEngine write FSapiEngine;
property SpellingEchoBack : Boolean
read FSpellingEchoBack write SetSpellingEchoBack default True;
property OnAskForDateFinish : TApdOnAskForDateTimeFinish
read FOnAskForDateFinish write FOnAskForDateFinish;
property OnAskForExtensionFinish : TApdOnAskForStringFinish
read FOnAskForExtensionFinish write FOnAskForExtensionFinish;
property OnAskForListFinish : TApdOnAskForIntegerFinish
read FOnAskForListFinish write FOnAskForListFinish;
property OnAskForPhoneNumberFinish : TApdOnAskForStringFinish
read FOnAskForPhoneNumberFinish
write FOnAskForPhoneNumberFinish;
property OnAskForSpellingFinish : TApdOnAskForStringFinish
read FOnAskForSpellingFinish write FOnAskFOrSpellingFinish;
property OnAskForTimeFinish : TApdOnAskForDateTimeFinish
read FOnAskForTimeFinish write FOnAskForTimeFinish;
property OnAskForYesNoFinish : TApdOnAskForBooleanFinish
read FOnAskForYesNoFinish write FOnAskForYesNoFinish;
property OnTapiDisconnect : TNotifyEvent
read FOnTapiDisconnect write FOnTapiDisconnect;
{properties}
property SelectedDevice;
property ComPort;
property StatusDisplay;
property TapiLog;
property AnswerOnRing;
property RetryWait;
property MaxAttempts;
property ShowTapiDevices;
property ShowPorts;
property EnableVoice;
property FilterUnsupportedDevices;
{events}
property OnTapiStatus;
property OnTapiLog;
property OnTapiPortOpen;
property OnTapiPortClose;
property OnTapiConnect;
property OnTapiFail;
property OnTapiDTMF;
property OnTapiCallerID;
property OnTapiWaveNotify;
property OnTapiWaveSilence;
end;
TApdSapiPhone = class (TApdCustomSapiPhone)
private
protected
public
published
property NoAnswerMax;
property NoAnswerTime;
property NumDigits;
property Options;
property SapiEngine;
{properties}
property SelectedDevice;
property ComPort;
property StatusDisplay;
property TapiLog;
property AnswerOnRing;
property RetryWait;
property MaxAttempts;
property ShowTapiDevices;
property ShowPorts;
property EnableVoice;
property FilterUnsupportedDevices;
{events}
property OnTapiStatus;
property OnTapiLog;
property OnTapiPortOpen;
property OnTapiPortClose;
property OnTapiConnect;
property OnTapiFail;
property OnTapiDTMF;
property OnTapiCallerID;
property OnTapiWaveNotify;
property OnTapiWaveSilence;
end;
implementation
procedure TokenizePhrase (Phrase : string;
Tokens : TStringList);
{ Tokenizes a series of words into a TStringList }
procedure AddWord (Tokens : TStringList; var NewWord : ShortString);
begin
if NewWord <> '' then
Tokens.Add (NewWord);
NewWord := '';
end;
type
TParseState = (psColChars, psColSpace, psInQuote);
var
State : TParseState;
i : Integer;
PhraseLen : Integer;
WorkString : ShortString;
begin
Tokens.Clear;
i := 1;
WorkString := '';
State := psColChars;
PhraseLen := Length (Phrase);
while i <= PhraseLen do begin
case State of
psColChars :
if Phrase[i] = ' ' then begin
State := psColSpace;
AddWord (Tokens, WorkString);
end else if Phrase[i] = '"' then begin
State := psInQuote;
AddWord (Tokens, WorkString);
WorkString := WorkString + Phrase[i];
end else
WorkString := WorkString + Phrase[i];
psColSpace :
if Phrase[i] = '"' then begin
State := psInQuote;
WorkString := WorkString + Phrase[i];
end else if Phrase[i] <> ' ' then begin
WorkString := WorkString + Phrase[i];
State := psColChars;
end;
psInQuote :
if Phrase[i] = '"' then begin
WorkString := WorkString + Phrase[i];
AddWord (Tokens, WorkString);
State := psColChars;
end else
WorkString := WorkString + Phrase[i];
end;
Inc (i);
end;
if PhraseLen > 1 then begin
if (WorkString[1] = '"') and (WorkString[PhraseLen] <> '"') then
WorkString := WorkString + '"';
end;
AddWord (Tokens, WorkString);
end;
{$IFNDEF Delphi6}
{ Add some general convenience routines }
function DayOfTheWeek (TheDate : TDateTime) : Integer;
begin
Result := (DateTimeToTimeStamp (TheDate).Date - 1) mod 7 + 1;
end;
function MonthOfTheYear (TheDate : TDateTime) : Word;
var
Year, Day: Word;
begin
DecodeDate (TheDate, Year, Result, Day);
end;
procedure IncAMonth (var Year, Month, Day : Word; NumMonths : Integer);
type
PMonthDayTable = ^TMonthDayTable;
TMonthDayTable = array[1..12] of Word;
const
MonthDays: array [Boolean] of TMonthDayTable =
((31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31),
(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31));
var
DayTable: PDayTable;
Sign: Integer;
begin
if NumMonths >= 0 then
Sign := 1
else
Sign := -1;
Year := Year + (NumMonths div 12);
NumMonths := NumMonths mod 12;
Inc (Month, NumMonths);
if Word (Month-1) > 11 then
begin
Inc (Year, Sign);
Inc (Month, -12 * Sign);
end;
DayTable := @MonthDays[IsLeapYear (Year)];
if Day > DayTable^[Month] then
Day := DayTable^[Month];
end;
function IncMonth(const TheDate : TDateTime; NumberOfMonths : Integer) : TDateTime;
var
Year, Month, Day : Word;
begin
DecodeDate (TheDate, Year, Month, Day);
IncAMonth (Year, Month, Day, NumberOfMonths);
Result := EncodeDate (Year, Month, Day);
end;
function IncYear (TheDate : TDateTime; NumYears : Integer) : TDateTime;
begin
Result := IncMonth (TheDate, NumYears * 12);
end;
{$ENDIF}
{ TApdSapiGrammarList }
procedure TApdSapiGrammarList.ReadSectionValues (Section : string;
List : TStringList);
var
i : Integer;
FirstChar : Char;
begin
i := IndexOf ('[' + Section + ']');
List.Clear;
if i < 0 then
Exit;
Inc (i);
while (i < Count) do begin
if Length (Strings[i]) > 0 then begin
FirstChar := Trim (Strings[i])[1];
if (FirstChar <> ';') and (FirstChar <> '[') then
List.Add (Strings[i])
else if FirstChar = '[' then
Exit;
end;
Inc (i);
end;
end;
function TApdSapiGrammarList.SectionExists (Section : string) : Boolean;
begin
if IndexOf ('[' + Section + ']') >= 0 then
Result := True
else
Result := False;
end;
{ TApdSapiPhonePrompts }
constructor TApdSapiPhonePrompts.Create;
begin
inherited Create;
AskAreaCode := ApdAskAreaCode;
AskLastFour := ApdAskLastFour;
AskNextThree := ApdAskNextThree;
CannotGoBack := ApdCannotGoBack;
CannotHangUp := ApdCannotHangUp;
HangingUp := ApdHangingUp;
Help := ApdHelp;
Help2 := ApdHelp2;
HelpVerify := ApdHelpVerify;
GoingBack := ApdGoingBack;
Main := ApdMain;
Main2 := ApdMain2;
FMaxSpeed := ApdMaxSpeed;
FMinSpeed := ApdMinSpeed;
Operator := ApdOperator;
NoOperator := ApdNoOperator;
NoSpeedChange := ApdNoSpeedChange;
SpeakingFaster := ApdSpeakingFaster;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -