📄 main.pas
字号:
unit Main;
{
Program name: TapiWaveSkeleton
Version: V1.0
Date: October 2001
Requirements: amWave Lite control, amTapi Lite control, telephony board or voice
modem.
Operating System: Windows 98, Windows ME, Windows NT 4, Windows 2000, Windows XP
Note: Under Windows NT 4 voice modems are not supported because of the lack of a
voice capable TAPI universal modem driver.
Program Purpose: To demonstate how simple it is to add telephony functions to your
application using the Allen-Martin amWave control in conjunction with amTapi.
The supported features of this demonstration program are:
(1) Enumerates the installed TAPI compliant telephony devices or modems.
(2) Translation of the subscriber telephone number to be called using the dialing
rules for the currently selected Location and telephony line device.
(3) Placing outgoing voice calls.
(4) Answering incoming voice calls
(5) Monitoring call progress
(6) Monitoring Caller ID for incoming calls.
(7) Monitoring remote DTMF touch key tones
(8) Play and record wave files from\to the telephone line or sound card.
(9) VU (Volume Unit) meters.
(8) Play volume, record gain.
(8) Silence detection while recording to a file or for silence detection only.
This demonstration program does not show how to use all of the feature supported
by amTapi\amWave but should be sufficient to get you started. Further information
can be found in the help files. Additional sample demo programs may be found on
our web site www.allen-martin-inc.com
If you need to handle data calls you should consider using our amComm control.
Professional and Enterprise versions of amWave\amTapi offering additional
features are also available, again see our web site for details.
}
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus, StdCtrls, AMITAPILib_TLB, OleCtrls, AMIWAVELib_TLB, Settings,
ComCtrls, reg, AMIWAVEPROLib_TLB, AMITAPIPROLib_TLB;
type
TfrmMain = class(TForm)
MainMenu: TMainMenu;
File1: TMenuItem;
Exit1: TMenuItem;
Options1: TMenuItem;
Settings1: TMenuItem;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
GroupBox5: TGroupBox;
GroupBox6: TGroupBox;
GroupBox7: TGroupBox;
GroupBox4: TGroupBox;
GroupBox3: TGroupBox;
CommandCopy: TButton;
TextCallState: TMemo;
CommandManualAnswer: TButton;
CommandClear: TButton;
CommandHangUp: TButton;
LabelStatus: TLabel;
LabelSilence: TLabel;
TextTelephoneNumber: TEdit;
CommandCall: TButton;
TextGenerateDigits: TEdit;
CommandGenerateDigits: TButton;
ProgressBar: TProgressBar;
CommandPlay: TButton;
CommandRecord: TButton;
CommandStop: TButton;
GroupBox8: TGroupBox;
GroupBox9: TGroupBox;
OptionRecordFile: TRadioButton;
OptionRecordNull: TRadioButton;
OptionSoundCard: TRadioButton;
OptionLine: TRadioButton;
SliderPlayVolume: TTrackBar;
SliderRecordVolume: TTrackBar;
Label1: TLabel;
Label2: TLabel;
amTapiPro1: TamTapiPro;
amWavePro1: TamWavePro;
procedure Settings1Click(Sender: TObject);
procedure Exit1Click(Sender: TObject);
procedure CommandManualAnswerClick(Sender: TObject);
procedure CommandHangUpClick(Sender: TObject);
procedure CommandClearClick(Sender: TObject);
procedure CommandCallClick(Sender: TObject);
procedure CommandGenerateDigitsClick(Sender: TObject);
procedure CommandCopyClick(Sender: TObject);
procedure CommandPlayClick(Sender: TObject);
procedure CommandStopClick(Sender: TObject);
procedure CommandRecordClick(Sender: TObject);
procedure SliderPlayVolumeChange(Sender: TObject);
procedure SliderRecordVolumeChange(Sender: TObject);
procedure amTapiPro1CallerID(Sender: TObject; const Number,
Name: WideString; Flags: Integer);
procedure amTapiPro1CallState(Sender: TObject; const State: WideString);
procedure amTapiPro1Connected(Sender: TObject);
procedure amTapiPro1DelayedError(Sender: TObject; decType: Integer;
const Description: WideString);
procedure amTapiPro1DigitReceived(Sender: TObject;
const Digit: WideString);
procedure amTapiPro1Disconnected(Sender: TObject);
procedure amTapiPro1GenerateDigitsDone(Sender: TObject);
procedure amTapiPro1Idle(Sender: TObject);
procedure amTapiPro1IncomingCall(Sender: TObject; RingNumber: Integer);
procedure amWavePro1DonePlay(Sender: TObject);
procedure amWavePro1DoneRecord(Sender: TObject);
procedure amWavePro1Silence(Sender: TObject; Silence: WordBool);
procedure amWavePro1VUChange(Sender: TObject; PlayVolume,
RecordLevel: Smallint);
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
OWNERCONST = 4;
var
frmMain: TfrmMain;
PlayVol, RecordVol:integer;
implementation
{$R *.DFM}
procedure TfrmMain.Settings1Click(Sender: TObject);
begin
frmSettings.show;
if amTapiPro1.LineOpen then amTapiPro1.LineOpen := False;
amTapiPro1.LineName := GetSetting('TapiWave', 'Settings', 'Line Device', 'Not Set');
amTapiPro1.CallPrivilege := OWNERCONST;
amTapiPro1.LineOpen := True;
TextTelephoneNumber.Text := GetSetting('TapiWave', 'Settings', 'Telephone Number', '');
end;
procedure TfrmMain.Exit1Click(Sender: TObject);
begin
Self.close;
end;
procedure TfrmMain.CommandManualAnswerClick(Sender: TObject);
begin
amTapiPro1.Answer;
end;
procedure TfrmMain.CommandHangUpClick(Sender: TObject);
begin
amWavePro1.StopPlay;
amWavePro1.StopRecord;
amTapiPro1.HangUp;
end;
procedure TfrmMain.CommandClearClick(Sender: TObject);
begin
TextCallState.Text := '';
end;
procedure TfrmMain.CommandCallClick(Sender: TObject);
var NumberToCall : Widestring;
DisplayableNumber : String;
begin
//If you want to translate the number using the Windows dialing properties the number
//should be in canonical format eg. +1 (222) 222-2222 +CountryCode (AreaCode)-Number
NumberToCall := TextTelephoneNumber.Text;
If (GetSetting('TapiProWavePro', 'Settings', 'Translate Numbers', true) = true) then
//Translate number
DisplayableNumber := amTapiPro1.TranslateNumber(NumberToCall)
else
begin
//Don't translate number so clean up number ready to dial
NumberToCall := StringReplace(NumberToCall, '+', '', [rfReplaceAll]);
NumberToCall := StringReplace(NumberToCall, '(', '', [rfReplaceAll]);
NumberToCall := StringReplace(NumberToCall, ')', '', [rfReplaceAll]);
NumberToCall := StringReplace(NumberToCall, '-', '', [rfReplaceAll]);
NumberToCall := 'T ' + StringReplace(NumberToCall, ' ', '', [rfReplaceAll]);
DisplayableNumber := NumberToCall;
end;
LabelStatus.Caption := 'Calling ' + DisplayableNumber;
//Make the call
CommandHangUp.Enabled := True;
CommandCall.Enabled := False;
amTapiPro1.MakeCall(NumberToCall);
//Stop user from adjusting settings, we are going on line.
Settings1.Enabled := False;
end;
procedure TfrmMain.CommandGenerateDigitsClick(Sender: TObject);
begin
//Play DTMF touch tone digits on the telephone line
//voice modems in general do not support duration so set it to 100ms
amTapiPro1.GenerateDigits(TextGenerateDigits.Text, 100);
end;
procedure TfrmMain.CommandCopyClick(Sender: TObject);
begin
CopyFile('Record.wav','Play.wav',False);
end;
procedure TfrmMain.CommandPlayClick(Sender: TObject);
var SoundCardID : integer;
begin
//Set file name of wave to play
amWavePro1.PlayFilename :='Play.wav';
if OptionSoundCard.Checked then
begin
//Get saved wave output device ID from registry
SoundCardID := GetSetting('TapiProWavePro', 'Settings', 'Sound Card Output', -1);
if (SoundCardID = -1) then
begin
Showmessage ('No wave output selected in the settings menu');
Exit;
end;
//Set wave output device ID
amWavePro1.Play(SoundCardID);
end
else
amWavePro1.Play(amTapiPro1.LineWaveOutID);
CommandStop.Enabled := True;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -