以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 XML在语音技术中的应用 』   (http://bbs.xml.org.cn/list.asp?boardid=47)
----  prompt调用  (http://bbs.xml.org.cn/dispbbs.asp?boardid=47&rootid=&id=61703)


--  作者:佛间花
--  发布时间:4/23/2008 11:25:00 AM

--  prompt调用
各位大侠晚上(早上、中午、下午)好,我现在想问一下,假如我要实现一个最简单的vxml文档,只播放一句提示语,那么prompt模块是如何被调用的?最好有个详细的函数调用次序说明,谢谢!~
再扩展一下,假如我要按键才播放提示语,那么rec模块又是如何被调用的呢?
--  作者:zlei12
--  发布时间:4/23/2008 8:45:00 PM

--  
Prompt过程大致如下:
1) 1个或多个OSBpromptQueue,即解释器通知底层这次要播放的所有内容。无论是TTS的文本、语音文件名或语音数据均通过该接口调用,注意这个调用是非阻塞(non-blocking)的。一般的,对于TTS可以异步启动后台文本转换,语音文件可放入语音文件队列,语音数据如回放<record>的内容。再说明一点,多个Queue可以是TTS文本和语音文件混合的情况;
2) OSBpromptPlay,也是non-blocking的,即通知底层可以异步启动放音了。注意,如果前面异步启动了实时TTS转换,是否可以播放语音文件了还不一定,需具体实现处理;
3)OSBpromptWait,这是同步调用(blocking)的,即底层必须在放完所有语音后才能返回(当然放音可以被按键打断)。
由于我未实现OSBpromptPrefetch功能,故此接口情况不清楚。

Rec大致如此:
1) 1个或多个OSBrecLoadGrammarFromString,获取语法内容;
2) 1个或多个OSBrecActivateGrammar,表示激活这次识别用到的所有语法;
3) OSBrecRecognize,同步的识别功能,直到底层识别、获取输入后返回;
4) 对应OSBrecActivateGrammar的OSBrecDeactivateGrammar;
5) 对应OSBrecLoadGrammarFromString的OSBrecFreeGrammar。
再解释一下RecognitionResultDestroy,这是用于释放动态分配的内存用。例如在<record>的OSBrecRecord处理中可以将留言的语音流返回给解释器回放,这需要动态分配不小的一块内存空间,该函数通过函数指针方式供解释器在使用完内存后释放空间,否则会有严重的内存泄露。

建议编译demo程序,并在各实现函数中加trace,配合上vxml脚本可以清晰地看到调用顺序。


--  作者:佛间花
--  发布时间:4/24/2008 3:01:00 PM

--  
多谢楼上的大哥!~
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
46.875ms