Example Audio Discriminator
This example is of source code for a VTScada page that implements a simple voice response system.
[
Title = "Voice";
Color = "<E6E6E6>";
Bitmap;
SecBit;
WinFlag = 0;
AudioDiscriminator Module { Module to receive incoming calls };
{ TAPI Media modes used to select the compatibility of a modem }
Constant TAPIMEDIATYPE_AUDIO = 0x08;
Constant TAPIMEDIATYPE_DATAMODEM = 0x10;
Constant NEED_DTMF = 0x1000 { Enable DTMF when handling call };
Constant DTMF_STOPS_SPEECH = 0x2000 { Rec'd DTMF stops any speech };
spVoice = "bf5ead45-9f65-11cf-8fc8-0020af14f271"
{ Voice for telephone modem};
Constant SMALLPAUSE = "\Pau=250\";
Constant LONGPAUSE = "\Pau=500\";
Trig;
Number;
Name = "(Phone)";
DataPort;
KeyPress;
BookMark;
Phase;
Phrase;
Incoming = 0;
]
Init [
If \ModemManager\Started Main;
[
Return(Self);
AddVariable(\Code, Name, 0, 256, 0, 0, 0, 0, 0, 0);
Scope(Code, Name) = Self();
Phase = 0;
\ModemManager.Register(Self(), 1, 1,
TAPIMEDIATYPE_AUDIO + NEED_DTMF + DTMF_STOPS_SPEECH,
SpVoice, 30 { Discriminator Timeout }, Name);
]
]
Main [
Return(Self);
\System.Edit(40, 60, 180, 90, "Number to Call", Number, !Valid(DataPort), Trig, Invalid, 4, 1);
If Trig;
[
Trig = Invalid;
Phase = BookMark = 1;
CloseStream(DataPort);
\ModemManager.MakeCall(Number, 110, 8, 1, 0, 5, Name, Invalid,
TAPIMEDIATYPE_AUDIO + NEED_DTMF + DTMF_STOPS_SPEECH, spVoice);
]
If TimeOut((ValueType(DataPort) == 8) && !Incoming, 6) && Phase == BookMark;
[
BookMark = -1;
IfThen(!Valid(Case(Phase - 1,
{0} Phrase = "Hello and welcome. Please press a key to continue.",
{1} Phrase = "This is message number 1",
{2} Phrase = "This is message number 2",
{3} Phrase = "This is message number 3",
{4} Phrase = "Goodbye!"
)),
CloseStream(DataPort)
);
SWrite(DataPort, "%s%s\\Mrk=%d\\\r", SmallPause, Phrase, Phase);
]
If SerWait(DataPort, 1);
[
KeyPress = SerRcv(DataPort, 1);
IfElse( PickValid(KeyPress >= 0 && KeyPress <= 9, 0) || KeyPress == "#" || KeyPress == "*", Execute(
{ DTMF from phone - cancels any pending speech }
Phase++;
IfThen(KeyPress == "*",
Phase = 1;
);
IfThen(KeyPress == "#",
Phase = 5;
);
BookMark = Phase;
);
{ Else }
{ Must be a bookmark }
IfThen(KeyPress == MakeBuff(1, 0x41 + Phase),
IfThen(Phase > 4,
Phase++;
);
BookMark = Phase;
);
);
]
]
<
{==================== Voice\AudioDiscriminator =================== }
{ This module, runs the receive call handling. If a call is not successfully authenticated then the caller
ModemManager) will time out and will then attempt to hand the call off. }
{====================================================================}
AudioDiscriminator
(
Mode;
)
Check [
Incoming = 1;
If TimeOut(1, 7);
[
Phase = 1;
Phrase = "Hello, you have reached the VTScada modem tester.";
SWrite(DataPort, "%s%s\\Mrk=%d\\\r", SmallPause, Phrase, Phase);
]
If KeyPress == "9" Idle;
[
Phase = BookMark = 1;
Incoming = 0;
Return(1);
]
]
Idle [
]
{ End of Voice\AudioDiscriminator }
>