您的位置:程序门 -> vc/mfc -> 基础类



用microsoft sdk实现中文语音发音的方法小结


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


用microsoft sdk实现中文语音发音的方法小结
发表于:2007-07-26 19:14:59 楼主
在网上查了很多有关microsoft   sdk使用方法的帖子,但都不是很全面,为了减少大家查找资料的时间,现把自己用microsoft   sdk实现中文语音发音的方法介绍给大家,希望有所帮助

一   安装microsoft   sdk   5.1
      安装后在环境变量及vc中设置相应的环境参数

二   安装microsoft   sdk中文包
      将其安装在microsoft   sdk   5.1所在的目录下,比如microsoft   sdk   5.1
      安装在了e:\program   files\microsoft   speech   sdk   5.1目录下,那么
      microsoft   sdk   5.1中文包也应该安装在e:\program   files\
      microsoft   speech   sdk   5.1目录下

三   配置speech   sdk引擎当前所处理的语言
      打开 "控制面板 ",打开 "语音 "配置项目,可以看到在这里我们可以指定
      当前可以对何种语言进行识别或者合成,还可以配置相关的硬件设备以
      及控制语速,如下图
 

在 "文字-语音转换 "的 "语音选择 "组合框中选择简体中文(microsoft   simplified   chinese)。这样就可以合成汉语文字了。


四   vc编程
       
#include   <sapi.h>

ispvoice*   pvoice   =   null;

//com初始化:
if   (failed(::coinitialize(null)))
return;

    //获取ispvoice接口:
    hresult   hr   =   cocreateinstance(clsid_spvoice,   null,   clsctx_all,   iid_ispvoice,   (void   **)&pvoice);
    if(   succeeded(   hr   )   )
    {    
    updatedata();
                    cstring   str(“欢迎来到武汉大学电子信息学院”);                   //要发音的字符串
    int   bufsize   =   multibytetowidechar(936,0,str,-1,null,0);     //计算简体中文字符串   s   转成   widestring   之后占用的内存字节数
    wchar   wsz[128];                                                                   //定义wchar类型的数组wsz,因为speak函数的第一个参数为wchar类型
    multibytetowidechar(936,0,str,-1,wsz,bufsize);                   //将   ansistring   字符串   str   转化为   unicode   的   widestring
            hr=pvoice-> speak(wsz,   0,   null);                                         //调用函数speak发音
            pvoice-> release();                                                                   //释放pvoice内存
            pvoice=null;
    }

五   附录
api函数multibytetowidechar的用法(精)

有关手机发送接受短消息的at指令集
采用tpdu发送格式,要将中文转换,看到提示要用api函数multibytetowidechar,

就是把   ansistring   转成   widestring,   用   bcb   非常简单了  
ansistring   s   =   "源字符串 ";
widestring   w   =   s;   //w   就是转成   widechar   的了,使用   w   就可以了

如果你想用   api   函数,参数如下:
api   函数   multibytetowidechar  
第一个参数为代码页,   用   getlocaleinfo   函数获取当前系统的代码页,936:   简体中文,   950:   繁体中文
第二个参数为选项,一般用   0   就可以了
第三个参数为   ansi   字符串的地址,   这个字符串是第一个参数指定的语言的   ansi   字符串   (ansistring)
第四个参数为   ansi   字符串的长度,如果用   -1,   就表示是用   0   作为结束符的字符串
第五个参数为转化生成的   unicode   字符串   (widestring)   的地址,   如果为   null,   就是代表计算生成的字符串的长度
第六个参数为转化生成的   unicode   字符串缓存的容量

int   bufsize   =   multibytetowidechar(936,0,s,-1,null,0);   //计算简体中文字符串   s   转成   widestring   之后占用的内存字节数
……   //在此处为   wsbuf   分配内存   bufsize   个字节
multibytetowidechar(936,0,s,-1,wsbuf,bufsize);   //把简体中文   ansistring   字符串   s   转化为   unicode   的   widestring


快速检索

最新资讯
热门点击