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

📄 vxml.h

📁 安装 H323需要的pwlib库
💻 H
📖 第 1 页 / 共 2 页
字号:
/* * vxml.h * * VXML engine for pwlib library * * Copyright (C) 2002 Equivalence Pty. Ltd. * * The contents of this file are subject to the Mozilla Public License * Version 1.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Original Code is Portable Windows Library. * * The Initial Developer of the Original Code is Equivalence Pty. Ltd. * * Contributor(s): ______________________________________. * * $Log: vxml.h,v $ * Revision 1.35.2.1  2005/02/04 05:19:08  csoutheren * Backported patches from Atlas-devel * * Revision 1.36  2004/12/08 00:52:06  csoutheren * Added GetSampleFrequency function * * Revision 1.35  2004/11/11 07:34:50  csoutheren * Added #include <ptlib.h> * * Revision 1.34  2004/08/09 11:10:34  csoutheren * Changed SetTextToSpeech to return ptr to new engine * * Revision 1.33  2004/07/26 00:40:41  csoutheren * Fixed thread starvation problem under Linux by splitting channelMutex * into seperate read and write mutexes * * Revision 1.32  2004/07/23 00:59:26  csoutheren * Check in latest changes * * Revision 1.31  2004/07/15 03:12:41  csoutheren * Migrated changes from crs_vxnml_devel branch into main trunk * * Revision 1.30.2.7  2004/07/13 08:13:05  csoutheren * Lots of implementation of factory-based PWAVFile * * Revision 1.30.2.6  2004/07/12 08:30:16  csoutheren * More fixes for abstract factory implementation of PWAVFile * * Revision 1.30.2.5  2004/07/08 04:58:11  csoutheren * Exposed VXML playable classes to allow descendants * * Revision 1.30.2.4  2004/07/07 07:07:41  csoutheren * Changed PWAVFile to use abstract factories (extensively) * Removed redundant blocking/unblocking when using G.723.1 * More support for call transfer * * Revision 1.30.2.3  2004/07/06 01:38:57  csoutheren * Changed PVXMLChannel to use PDelayChannel * Fixed bug where played files were deleted after playing * * Revision 1.30.2.2  2004/07/02 07:22:37  csoutheren * Updated for latest factory changes * * Revision 1.30.2.1  2004/06/20 11:18:03  csoutheren * Rewrite of resource cacheing to cache text-to-speech output * * Revision 1.30  2004/06/19 07:21:08  csoutheren * Change TTS engine registration to use abstract factory code * Started disentanglement of PVXMLChannel from PVXMLSession * Fixed problem with VXML session closing if played data file is not exact frame size multiple * Allowed PVXMLSession to be used without a VXML script * Changed PVXMLChannel to handle "file:" URLs * Numerous other small improvements and optimisations * * Revision 1.29  2004/06/02 08:29:28  csoutheren * Added new code from Andreas Sikkema to implement various VXML features * * Revision 1.28  2004/06/02 06:17:21  csoutheren * Removed unnecessary buffer copying and removed potential busy loop * * Revision 1.27  2004/03/23 04:48:42  csoutheren * Improved ability to start VXML scripts as needed * * Revision 1.26  2003/04/23 11:55:13  craigs * Added ability to record audio * * Revision 1.25  2003/04/08 05:09:41  craigs * Added ability to use commands as an audio source * * Revision 1.24  2003/03/18 00:45:36  robertj * Fixed missing return in previous patch. * * Revision 1.23  2003/03/18 00:40:28  robertj * Added back the IsMediaPCM() function for backward compatibility. * * Revision 1.22  2003/03/17 08:02:54  robertj * Combined to the separate incoming and outgoing substream classes into *   a single class to make it easier to produce codec aware descendents. * Added G.729 substream class. * * Revision 1.21  2002/11/08 03:38:34  craigs * Fixed problem with G.723.1 files * * Revision 1.20  2002/09/18 06:37:13  robertj * Added functions to load vxml directly, via file or URL. Old function *   intelligently picks which one to use. * * Revision 1.19  2002/09/16 01:08:59  robertj * Added #define so can select if #pragma interface/implementation is used on *   platform basis (eg MacOS) rather than compiler, thanks Robert Monaghan. * * Revision 1.18  2002/09/03 04:11:14  craigs * More VXML changes * * Revision 1.17  2002/08/30 05:06:13  craigs * Added changes for PVXMLGrammar * * Revision 1.16  2002/08/28 08:04:31  craigs * Reorganised VXMLSession class as per contributed code * * Revision 1.15  2002/08/28 05:10:27  craigs * Added ability to load resources via URI * Added cache * * Revision 1.14  2002/08/27 02:19:13  craigs * Added <break> command in prompt blocks * Fixed potential deadlock * * Revision 1.13  2002/08/15 04:11:16  robertj * Fixed shutdown problems with closing vxml session, leaks a thread. * Fixed potential problems with indirect channel Close() function. * * Revision 1.12  2002/08/08 01:03:19  craigs * Added function to re-enable automatic call clearing on script end * * Revision 1.11  2002/08/06 07:44:56  craigs * Added lots of stuff from OpalVXML * * Revision 1.10  2002/07/29 15:08:34  craigs * Added autodelete option to PlayFile * * Revision 1.9  2002/07/29 15:03:58  craigs * Added access to queue functions * Added autodelete option to AddFile * * Revision 1.8  2002/07/29 14:15:47  craigs * Added asynchronous VXML execution * * Revision 1.7  2002/07/17 08:34:12  craigs * Fixed deadlock problems * * Revision 1.6  2002/07/17 06:08:43  craigs * Added additional "sayas" classes * * Revision 1.5  2002/07/10 13:14:55  craigs * Moved some VXML classes from Opal back into PTCLib * * Revision 1.4  2002/07/05 06:27:26  craigs * Removed unused member variables * Added OnEmptyAction callback * * Revision 1.3  2002/07/02 06:23:51  craigs * Added recording functions * * Revision 1.2  2002/06/27 05:39:18  craigs * Fixed Linux warning * * Revision 1.1  2002/06/27 05:28:17  craigs * Initial version * * */#ifndef _VXML_H#define _VXML_H#ifdef P_USE_PRAGMA#pragma interface#endif#include <ptlib/pipechan.h>#include <ptclib/pxml.h>#include <ptclib/delaychan.h>#include <ptclib/pwavfile.h>#include <ptclib/ptts.h>#include <ptclib/url.h>#include <queue>class PVXMLSession;class PVXMLDialog;class PVXMLSession;class PVXMLTransferOptions;class PVXMLTransferResult;// these are the same strings as the Opal equivalents, but as this is PWLib, we can't use Opal contants#define VXML_PCM16         "PCM-16"#define VXML_G7231         "G.723.1"#define VXML_G729          "G.729"#define PVXML_HAS_FACTORY   1class PVXMLGrammar : public PObject{  PCLASSINFO(PVXMLGrammar, PObject);  public:    PVXMLGrammar(PXMLElement * field);    virtual BOOL OnUserInput(const char /*ch*/) { return TRUE; }    virtual void Stop() { }    PString GetValue() const { return value; }    PXMLElement * GetField() { return field; }    enum GrammarState {       FILLED,       // got something that matched the grammar      NOINPUT,      // timeout or still waiting to match      NOMATCH,      // recognized something but didn't match the grammar      HELP };       // help keyword    GrammarState GetState() const { return state; }  protected:    PXMLElement * field;    PString value;    GrammarState state;};//////////////////////////////////////////////////////////////////class PVXMLMenuGrammar : public PVXMLGrammar{  PCLASSINFO(PVXMLMenuGrammar, PVXMLGrammar);  public:    PVXMLMenuGrammar(PXMLElement * field);};//////////////////////////////////////////////////////////////////class PVXMLDigitsGrammar : public PVXMLGrammar{  PCLASSINFO(PVXMLDigitsGrammar, PVXMLGrammar);  public:    PVXMLDigitsGrammar(PXMLElement * field, PINDEX minDigits, PINDEX maxDigits, PString terminators);    BOOL OnUserInput(const char ch);    virtual void Stop();  protected:    PINDEX minDigits;    PINDEX maxDigits;    PString terminators;};//////////////////////////////////////////////////////////////////class PVXMLCache : public PMutex{  public:    PVXMLCache(const PDirectory & _directory);    PFilePath CreateFilename(const PString & prefix, const PString & key, const PString & fileType);    void Put(const PString & prefix,             const PString & key,              const PString & fileType,              const PString & contentType,                  const PFilePath & fn,                  PFilePath & dataFn);    BOOL Get(const PString & prefix,             const PString & key,              const PString & fileType,                    PString & contentType,                        PFilePath & fn);    PFilePath GetCacheDir() const    { return directory; }    PFilePath GetRandomFilename(const PString & prefix, const PString & fileType);    static PVXMLCache & GetResourceCache();  protected:    PDirectory directory;};//////////////////////////////////////////////////////////////////class PVXMLChannel;class PVXMLChannelInterface {  public:    virtual PWAVFile * CreateWAVFile(const PFilePath & fn, PFile::OpenMode mode, int opts, unsigned fmt) = 0;    virtual void RecordEnd() = 0;    virtual void OnEndRecording(const PString & channelName) = 0;    virtual void Trigger() = 0;};//////////////////////////////////////////////////////////////////class PVXMLSession : public PIndirectChannel, public PVXMLChannelInterface{  PCLASSINFO(PVXMLSession, PIndirectChannel);  public:    PVXMLSession(PTextToSpeech * tts = NULL, BOOL autoDelete = FALSE);    ~PVXMLSession();    void SetFinishWhenEmpty(BOOL v)    { finishWhenEmpty = v; }    // new functions    PTextToSpeech * SetTextToSpeech(PTextToSpeech * _tts, BOOL autoDelete = FALSE);    PTextToSpeech * SetTextToSpeech(const PString & ttsName);    PTextToSpeech * GetTextToSpeech() { return textToSpeech; }    virtual BOOL Load(const PString & source);    virtual BOOL LoadFile(const PFilePath & file);    virtual BOOL LoadURL(const PURL & url);    virtual BOOL LoadVXML(const PString & xml);    virtual BOOL IsLoaded() const { return loaded; }    virtual BOOL Open(BOOL isPCM); // For backward compatibility FALSE=G.723.1    virtual BOOL Open(const PString & mediaFormat);    virtual BOOL Close();    BOOL Execute();    PVXMLChannel * GetVXMLChannel() const { return vxmlChannel; }    BOOL LoadGrammar(PVXMLGrammar * grammar);    virtual BOOL PlayText(const PString & text, PTextToSpeech::TextType type = PTextToSpeech::Default, PINDEX repeat = 1, PINDEX delay = 0);    BOOL ConvertTextToFilenameList(const PString & _text, PTextToSpeech::TextType type, PStringArray & list, BOOL useCacheing);    virtual BOOL PlayFile(const PString & fn, PINDEX repeat = 1, PINDEX delay = 0, BOOL autoDelete = FALSE);    virtual BOOL PlayData(const PBYTEArray & data, PINDEX repeat = 1, PINDEX delay = 0);    virtual BOOL PlayCommand(const PString & data, PINDEX repeat = 1, PINDEX delay = 0);    virtual BOOL PlayResource(const PURL & url, PINDEX repeat = 1, PINDEX delay = 0);    //virtual BOOL PlayMedia(const PURL & url, PINDEX repeat = 1, PINDEX delay = 0);    virtual BOOL PlaySilence(PINDEX msecs = 0);    virtual BOOL PlaySilence(const PTimeInterval & timeout);    virtual void SetPause(BOOL pause);    virtual void GetBeepData(PBYTEArray & data, unsigned ms);    virtual BOOL StartRecording(const PFilePath & fn, BOOL recordDTMFTerm, const PTimeInterval & recordMaxTime, const PTimeInterval & recordFinalSilence);    virtual BOOL EndRecording();    virtual BOOL IsPlaying() const;    virtual BOOL IsRecording() const;    virtual BOOL OnUserInput(const PString & str);    PString GetXMLError() const;    virtual void OnEndSession()         { }    virtual PString GetVar(const PString & str) const;    virtual void SetVar(const PString & ostr, const PString & val);    virtual PString PVXMLSession::EvaluateExpr(const PString & oexpr);    virtual BOOL RetreiveResource(const PURL & url, PString & contentType, PFilePath & fn, BOOL useCache = TRUE);    PDECLARE_NOTIFIER(PThread, PVXMLSession, VXMLExecute);    virtual BOOL DoTransfer(const PVXMLTransferOptions &) { return TRUE; }    virtual void OnTransfer(const PVXMLTransferResult &);    void SetCallingToken( PString& token ) { callingCallToken = token; }    PXMLElement * FindHandler(const PString & event);    // overrides from VXMLChannelInterface    PWAVFile * CreateWAVFile(const PFilePath & fn, PFile::OpenMode mode, int opts, unsigned fmt);    void OnEndRecording(const PString & channelName);    void RecordEnd();    void Trigger();  protected:    void Initialise();    void AllowClearCall();    void ProcessUserInput();    void ProcessNode();    void ProcessGrammar();    BOOL TraverseAudio();    BOOL TraverseGoto();    BOOL TraverseGrammar();    BOOL TraverseRecord();    BOOL TraverseIf();    BOOL TraverseExit();    BOOL TraverseVar();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -