| 发表于: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 |
|
|
|
|