微软 SAPI 5.1 语音库如何设置数字读法?

yusong1987 2014-07-17 06:36:47

RT,如何设置sapi5.1的数字读法,比如:这是123 在设置了数值读法时朗读为一百二十三 ,在设置了数字读法时朗读为一二三,

我试过用 XML 组合,好像不管用,有人知道该怎么做吗?谢谢帮忙!


下面是写的部分测试代码:

ISpeechVoice voice;

CLSIDFromProgID(L"SAPI.SpVoice", &CLSID_SpVoice);
voice.CreateDispatch(CLSID_SpVoice);
pDisp = voice.m_lpDispatch;

HRESULT hr = pDisp->QueryInterface(CLSID_SpVoice, (void**)&voice.m_lpDispatch);

if (hr == S_OK) {
pDisp->Release();
}
else {
voice.AttachDispatch(pDisp, TRUE);
}

CString strText = _T("<PITCH MIDDLE=\"%d\"><spell>1</spell>这个数字是123456</PITCH>");

voice.Speak(strText, SPF_IS_XML );

...全文
836 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
abc85193569 2016-01-27
  • 打赏
  • 举报
回复
str.replace(L"1",L"幺"); str.replace(L"2",L"二");.................
laowang2 2014-07-24
  • 打赏
  • 举报
回复
看看财务的数字转大写吧。
宝龙哥 2014-07-20
  • 打赏
  • 举报
回复
这个需要你转换成你想要的,然后读,比如123,转换成一百二十三读
dataxdata 2014-07-18
  • 打赏
  • 举报
回复
转换应该还是比较快的,比起语音播放的时间,转换时间应该可以忽略不计 比如,对于一个数字,按照个十百千万亿分别求其权重,对于万和亿的权重再递归调用一次,分别写下对应的汉字和位值应该就差不多了
yusong1987 2014-07-18
  • 打赏
  • 举报
回复
引用 2 楼 dataxdata 的回复:
可以自己根据需要,事先把123这样的数字转换成汉字一百二十三,或者汉字一二三,然后再让机器去读
我想的是 这种办法在没有办法设置语音库的情况才去用哦,自己处理的话,速度效率可能都会受影响哦,请问有比较快的转换算法吗?
yusong1987 2014-07-18
  • 打赏
  • 举报
回复
引用 4 楼 dataxdata 的回复:
转换应该还是比较快的,比起语音播放的时间,转换时间应该可以忽略不计 比如,对于一个数字,按照个十百千万亿分别求其权重,对于万和亿的权重再递归调用一次,分别写下对应的汉字和位值应该就差不多了
能给个转换例子么? 希望找到效率更好的转换算法,谢谢!
dataxdata 2014-07-17
  • 打赏
  • 举报
回复
可以自己根据需要,事先把123这样的数字转换成汉字一百二十三,或者汉字一二三,然后再让机器去读
yusong1987 2014-07-17
  • 打赏
  • 举报
回复
刚试的改了下XML 改成这样 CString strText = _T("<PITCH MIDDLE=\"50\"><spell>这个数字是123456</PITCH>"); 结果会读成 一二三四五六,但是读的慢了许多,就连前面的 “这个数字是” 都是一个字一个字的读,比读数值要慢很多。 是不是我写的不对呢? 求解答,谢谢!

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧