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

📄 main.pas

📁 delphi下基于tapi的话音存储
💻 PAS
📖 第 1 页 / 共 2 页
字号:
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 + -