VXIprompt.h
上传用户:xqtpzdz
上传日期:2022-05-21
资源大小:1764k
文件大小:15k
源码类别:

xml/soap/webservice

开发平台:

Visual C++

  1. /****************License************************************************
  2.  * Vocalocity OpenVXI
  3.  * Copyright (C) 2004-2005 by Vocalocity, Inc. All Rights Reserved.
  4.  * This program is free software; you can redistribute it and/or
  5.  * modify it under the terms of the GNU General Public License
  6.  * as published by the Free Software Foundation; either version 2
  7.  * of the License, or (at your option) any later version.
  8.  *  
  9.  * This program is distributed in the hope that it will be useful,
  10.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.  * GNU General Public License for more details.
  13.  *
  14.  * You should have received a copy of the GNU General Public License
  15.  * along with this program; if not, write to the Free Software
  16.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  17.  * Vocalocity, the Vocalocity logo, and VocalOS are trademarks or 
  18.  * registered trademarks of Vocalocity, Inc. 
  19.  * OpenVXI is a trademark of Scansoft, Inc. and used under license 
  20.  * by Vocalocity.
  21.  ***********************************************************************/
  22. #ifndef _VXIPROMPT_H
  23. #define _VXIPROMPT_H
  24. #include "VXItypes.h"
  25. #include "VXIvalue.h"
  26. #include "VXIheaderPrefix.h"
  27. #ifdef VXIPROMPT_EXPORTS
  28. #define VXIPROMPT_API SYMBOL_EXPORT_DECL
  29. #else
  30. #define VXIPROMPT_API SYMBOL_IMPORT_DECL
  31. #endif
  32. #ifdef __cplusplus
  33. extern "C" {
  34. #endif
  35. /**
  36.  * defgroup VXIprompt Prompt Interface
  37.  *
  38.  * Abstract interface for Prompting functionality.  Prompts are represented
  39.  * as a series of SSML documents.<p>
  40.  */
  41. /*@{*/
  42. /**
  43.  * @name Properties
  44.  * Keys identifying properties in a VXIMap passed to the Prompt
  45.  * interface functions.
  46.  */
  47. /*@{*/
  48. /**
  49.  * Key to a VXIMap that holds audio content created during a 
  50.  * &lt;record&gt;.  This map will contain key matching &lt;mark&gt; names
  51.  * in a SSML document passed to Queue.  Each key will return
  52.  * a VXIContent value.  See Queue for more information.
  53.  */
  54. #define PROMPT_AUDIO_REFS            L"vxi.prompt.audioReferences"
  55. /**
  56.  * Key to a VXIInteger that indicates whether a SSML document passed to
  57.  * Prefetch should be prefetched.  The value is 0 if no prefetch is
  58.  * requested.  1 if prefetch is desired.
  59.  */
  60. #define PROMPT_PREFETCH_REQUEST      L"vxi.prompt.prefetchLevel"
  61. /*@}*/
  62. /**
  63.  * For audio created during a &lt;record&gt;, the SSML document passed
  64.  * to Queue will contain a &lt;mark&gt; with a name prefixed with this
  65.  * string.  See Queue for more information.
  66.  */
  67. #define PROMPT_AUDIO_REFS_SCHEME     L"x-vxiprompt-ref"
  68. /**
  69.  * Result codes for interface methods
  70.  *
  71.  * Result codes less then zero are severe errors (likely to be
  72.  * platform faults), those greater then zero are warnings (likely to
  73.  * be application issues)
  74.  */
  75. typedef enum VXIpromptResult {
  76.   /* Fatal error, terminate call     */
  77.   VXIprompt_RESULT_FATAL_ERROR       =  -100,
  78.   /* I/O error                       */
  79.   VXIprompt_RESULT_IO_ERROR           =   -8,
  80.   /* Out of memory                   */
  81.   VXIprompt_RESULT_OUT_OF_MEMORY      =   -7,
  82.   /* System error, out of service    */
  83.   VXIprompt_RESULT_SYSTEM_ERROR       =   -6,
  84.   /* Errors from platform services   */
  85.   VXIprompt_RESULT_PLATFORM_ERROR     =   -5,
  86.   /* Return buffer too small         */
  87.   VXIprompt_RESULT_BUFFER_TOO_SMALL   =   -4,
  88.   /* Property name is not valid      */
  89.   VXIprompt_RESULT_INVALID_PROP_NAME  =   -3,
  90.   /* Property value is not valid     */
  91.   VXIprompt_RESULT_INVALID_PROP_VALUE =   -2,
  92.   /* Invalid function argument       */
  93.   VXIprompt_RESULT_INVALID_ARGUMENT   =   -1,
  94.   /* Success                         */
  95.   VXIprompt_RESULT_SUCCESS            =    0,
  96.   /* Normal failure, nothing logged  */
  97.   VXIprompt_RESULT_FAILURE            =    1,
  98.   /* Non-fatal non-specific error    */
  99.   VXIprompt_RESULT_NON_FATAL_ERROR    =    2,
  100.   /* URI fetch timeout               */
  101.   VXIprompt_RESULT_FETCH_TIMEOUT      =   50,
  102.   /* URI fetch error                 */
  103.   VXIprompt_RESULT_FETCH_ERROR        =   51,
  104.   /* Bad sayas class                 */
  105.   VXIprompt_RESULT_BAD_SAYAS_CLASS    =   52,
  106.   /* TTS access failure              */
  107.   VXIprompt_RESULT_TTS_ACCESS_ERROR   =   53,
  108.   /* TTS unsupported language        */
  109.   VXIprompt_RESULT_TTS_BAD_LANGUAGE   =   54,
  110.   /* TTS unsupported document type   */
  111.   VXIprompt_RESULT_TTS_BAD_DOCUMENT   =   55,
  112.   /* TTS document syntax error       */
  113.   VXIprompt_RESULT_TTS_SYNTAX_ERROR   =   56,
  114.   /* TTS generic error               */
  115.   VXIprompt_RESULT_TTS_ERROR          =   57,
  116.   /* Resource busy, such as TTS      */
  117.   VXIprompt_RESULT_RESOURCE_BUSY      =   58,
  118.   /* HW player unsupported MIME type */
  119.   VXIprompt_RESULT_HW_BAD_TYPE        =   59,
  120.   /* Generic HW player error         */
  121.   VXIprompt_RESULT_HW_ERROR           =   60,
  122.   /* resource is not avaialable      */
  123.   VXIprompt_RESULT_NO_RESOURCE        =   61,
  124.   /* resource is not authorized      */
  125.   VXIprompt_RESULT_NO_AUTHORIZATION   =   62,
  126.   /* Operation is not supported      */
  127.   VXIprompt_RESULT_UNSUPPORTED        =  100
  128. } VXIpromptResult;
  129. /**
  130.  * Abstract interface for Prompting functionality.  Prompts are represented
  131.  * as a series of SSML documents.<p>
  132.  *
  133.  * The Prompt interface the handles prefetching, caching, and
  134.  * streaming audio as required to provide good response times and low
  135.  * CPU and network overhead. <p>
  136.  *
  137.  * There is one prompt interface per thread/line.
  138.  */
  139. typedef struct VXIpromptInterface {
  140.   /**
  141.    * Get the VXI interface version implemented
  142.    *
  143.    * @return  VXIint32 for the version number. The high high word is
  144.    *          the major version number, the low word is the minor version
  145.    *          number, using the native CPU/OS byte order. The current
  146.    *          version is VXI_CURRENT_VERSION as defined in VXItypes.h.
  147.    */
  148.   VXIint32 (*GetVersion)(void);
  149.   /**
  150.    * Get the name of the implementation
  151.    *
  152.    * @return  Implementation defined string that must be different from
  153.    *          all other implementations. The recommended name is one
  154.    *          where the interface name is prefixed by the implementator's
  155.    *          Internet address in reverse order, such as com.xyz.rec for
  156.    *          VXIrec from xyz.com. This is similar to how VoiceXML 1.0
  157.    *          recommends defining application specific error types.
  158.    */
  159.   const VXIchar* (*GetImplementationName)(void);
  160.   /**
  161.    * Reset for a new session.
  162.    *
  163.    * This must be called for each new session, allowing for
  164.    * call specific handling to occur. For some implementations, this
  165.    * can be a no-op.  For others runtime binding of resources or other
  166.    * call start specific handling may be done on this call.<p>
  167.    *
  168.    * @param args  <b>[IN]</b> Implementation defined input and output
  169.    *                    arguments for the new session
  170.    *
  171.    * @return VXIprompt_RESULT_SUCCESS on success
  172.    */
  173.   VXIpromptResult (*BeginSession)(struct VXIpromptInterface  *pThis,
  174.                                   VXIMap                     *args);
  175.   /**
  176.    * Performs cleanup at the end of a call session.
  177.    *
  178.    * This must be called at the termination of a call, allowing for
  179.    * call specific termination to occur. For some implementations, this
  180.    * can be a no-op. For others runtime resources may be released or
  181.    * other adaptation may be completed.<p>
  182.    *
  183.    * @param args  <b>[IN]</b> Implementation defined input and output
  184.    *                    arguments for ending the session
  185.    *
  186.    * @return VXIprompt_RESULT_SUCCESS on success
  187.    */
  188.   VXIpromptResult (*EndSession)(struct VXIpromptInterface  *pThis,
  189.                                 VXIMap                     *args);
  190.   /**
  191.    * Start playing queued segments (non-blocking).
  192.    *
  193.    * Segments queued after this is called will not be played until
  194.    * this is called again.  It is possible errors may occur after this
  195.    * function has returned: Wait() will return the appropriate error
  196.    * if one occurred.<p>
  197.    *
  198.    * Note that this stops the current PlayFiller() operation although
  199.    * possibly after some delay, see PlayFiller() for more information.<p>
  200.    *
  201.    * @return VXIprompt_RESULT_SUCCESS on success
  202.    */
  203.   VXIpromptResult (*Play)(struct VXIpromptInterface  *pThis);
  204.   /**
  205.    * Queues and possibly starts the special play of a filler segment, 
  206.    * non-blocking
  207.    * 
  208.    * This plays a standard segment in a special manner in order to
  209.    * satisfy "filler" needs. A typical example is the VoiceXML
  210.    * fetchaudio attribute, used to specify filler audio that gets
  211.    * played while a document fetch is being performed and then
  212.    * interrupted once the fetch completes.<p>
  213.    *
  214.    * The filler segment is played to the caller once all active Play()
  215.    * operations, if any, have completed. If Play(), Wait(), or
  216.    * PlayFiller() is called before the filler segment starts playing
  217.    * it is cancelled and never played. If one of those functions is
  218.    * instead called after the filler segment starts playing, the
  219.    * filler segment is stopped once the minimum playback duration
  220.    * expires.<p>
  221.    *
  222.    * NOTE: this does not trigger the play of segments that have been queued
  223.    * but not yet played via Play().
  224.    *
  225.    * @param type        <b>[IN]</b> Type of segment, either a MIME content type,
  226.    *                    a sayas class name, or NULL to automatically detect
  227.    *                    a MIME content type (only valid when src is
  228.    *                    non-NULL). The supported MIME content types and
  229.    *                    sayas class names are implementation dependant.
  230.    * @param src         <b>deprecated</b>
  231.    * @param text        <b>[IN]</b> Text (possibly with markup) to play via TTS
  232.    *                    or sayas classes, pass NULL when src is non-NULL.
  233.    *                    The format of text for TTS playback may be W3C
  234.    *                    SSML (type set to VXI_MIME_SSML) or simple wchar_t
  235.    *                    text (type set to VXI_MIME_UNICODE_TEXT).  The
  236.    *                    implementation may also support other formats.
  237.    * @param properties  <b>[IN]</b> Properties to control the fetch, queue, and
  238.    *                    play, as specified above. May be NULL.
  239.    * @param minPlayMsec <b>[IN]</b> Minimum playback duration for the
  240.    *                    filler prompt once it starts playing, in
  241.    *                    milliseconds. This is used to "lock in" a play
  242.    *                    so that no less then this amount of audio is
  243.    *                    heard by the caller once it starts playing,
  244.    *                    avoiding confusion from audio that is played
  245.    *                    for an extremely brief duration and then cut
  246.    *                    off. Note that the filler prompt may never
  247.    *                    be played at all, however, if cancelled before
  248.    *                    it ever starts playing as described above.
  249.    *
  250.    * @return VXIprompt_RESULT_SUCCESS on success
  251.    */
  252.   VXIpromptResult (*PlayFiller)(struct VXIpromptInterface *pThis,
  253.                                 const VXIchar             *type,
  254.                                 const VXIchar             *src,
  255.                                 const VXIchar             *text,
  256.                                 const VXIMap              *properties,
  257.                                 VXIlong                    minPlayMsec);
  258.   /**
  259.    * Prefetch a segment (non-blocking).
  260.    *
  261.    * This fetches the segment in the background, since this returns
  262.    * before the fetch proceeds failures during the fetch will not be
  263.    * reported (invalid URI, missing file, etc.).  This may be called 
  264.    * prior to Queue() (possibily multiple times with increasing VXIinet
  265.    * prefetch priorities as the time for playback gets closer).
  266.    *
  267.    * @param type        <b>[IN]</b> Type of segment.  Currently, the only type
  268.    *                                used is VXI_MIME_SSML.
  269.    * @param src         <b>deprecated</b>
  270.    * @param text        <b>[IN]</b> The prompt text.  Currently, the only text
  271.    *                                format used is SSML.
  272.    * @param properties  <b>[IN]</b> Properties to control the fetch, queue, and
  273.    *                                play, as specified above. May be NULL.
  274.    *
  275.    * @return VXIprompt_RESULT_SUCCESS on success
  276.    */
  277.   VXIpromptResult (*Prefetch)(struct VXIpromptInterface *pThis,
  278.                               const VXIchar             *type,
  279.                               const VXIchar             *src,  /* deprecated - NOT USED */
  280.                               const VXIchar             *text,
  281.                               const VXIMap              *properties);
  282.   /**
  283.    * Queue a segment for playing (non-blocking).
  284.    * 
  285.    * The segment does not start playing until the Play() method is
  286.    * called.<p>
  287.    *
  288.    * VoiceXML allows audio collected during the &lt;record&gt; element to be played
  289.    * in the middle of SSML documents.  These recordings are passed by 
  290.    * VXI to the VXIprompt implementation inside the properties VXIMap.
  291.    * The PROMPT_AUDIO_REFS points to a second VXIMap containing pairs of
  292.    * identifiers (VXIStrings) and their associated recording (VXIContent).<p>
  293.    *
  294.    * Within the SSML document, the audio recording is replaced by a mark
  295.    * element whose 'name' attribute is a key inside the PROMPT_AUDIO_REFS
  296.    * map.  i.e., Use the mark name as the key to access the VXIContent
  297.    * in the PROMPT_AUDIO_REFS map.  The mark name for audio content will
  298.    * be prefixed with PROMPT_AUDIO_REFS_SCHEME so that it can be distinguished
  299.    * from other &lt;mark&gt; elements.<p>
  300.    *
  301.    * @param type        <b>[IN]</b> Type of segment.  Currently, the only type
  302.    *                    used is VXI_MIME_SSML.
  303.    * @param src         <b>deprecated</b>
  304.    * @param text        <b>[IN]</b> The prompt text.  Currently, the only text
  305.    *                    format used is SSML.
  306.    * @param properties  <b>[IN]</b> Properties to control the fetch, queue, and
  307.    *                    play, as specified above. May be NULL.
  308.    *
  309.    * @return VXIprompt_RESULT_SUCCESS on success
  310.    */
  311.   VXIpromptResult (*Queue)(struct VXIpromptInterface *pThis,
  312.                            const VXIchar             *type,
  313.                            const VXIchar             *src, /* deprecated - NOT USED */
  314.                            const VXIchar             *text,
  315.                            const VXIMap              *properties);
  316.   /**
  317.    * Wait until all played segments finish playing, blocking
  318.    *
  319.    * Note that this stops the current PlayFiller() operation although
  320.    * possibly after some delay, see PlayFiller() for more information.<p>
  321.    *
  322.    * If Wait is called, and no audio is playing, this function should
  323.    * not block.<p>
  324.    *
  325.    * @param playResult <b>[OUT]</b> Most severe error code resulting from
  326.    *                   a Play() operation since the last Wait()
  327.    *                   call, since Play() is asynchronous, errors
  328.    *                   may have occurred after one or more calls to
  329.    *                   it have returned. Note that this ignores any
  330.    *                   errors resulting from PlayFiller() operations.
  331.    *
  332.    * @return VXIprompt_RESULT_SUCCESS on success
  333.    */
  334.   VXIpromptResult (*Wait)(struct VXIpromptInterface *pThis,
  335.                           VXIpromptResult           *playResult);
  336. } VXIpromptInterface;
  337. /*@}*/
  338. #ifdef __cplusplus
  339. }
  340. #endif
  341. #include "VXIheaderSuffix.h"
  342. #endif  /* include guard */