2 jie198555 jie198555 于 2014.11.17 16:38 提问

关于Java使用Sapi.SpVoice语音合成问题

ActiveXComponent sap = new ActiveXComponent("Sapi.SpVoice");
Dispatch sapo = sap.getObject();

    try {

        sap.setProperty("Volume", new Variant(volume));
        sap.setProperty("Rate", new Variant(rate));

        Variant defalutVoice = sap.getProperty("Voice"); 

        Dispatch dispdefaultVoice = defalutVoice.toDispatch(); 
        Variant allVoices = Dispatch.call(sapo,"GetVoices"); 
        Dispatch dispVoices = allVoices.toDispatch(); 

        Dispatch setvoice = Dispatch.call(dispVoices, "Item", new Variant(1)). toDispatch();  
        ActiveXComponent voiceActivex = new ActiveXComponent(dispdefaultVoice); 
        ActiveXComponent setvoiceActivex = new ActiveXComponent(setvoice); 

        Variant item = Dispatch.call(setvoiceActivex, "GetDescription"); 

        Dispatch.call(sapo, "Speak", new Variant(message));

    } catch (Exception e) {
        e.printStackTrace();
    } finally { 
        sapo.safeRelease();
        sap.safeRelease();
    }

使用以上代码可以实现将文字转换成语音朗读,但只是调用windows系统设置的默认语音库,想要换语音库还要进控制面板-语音进行语音库选择。求如何实现在代码中调用不同语音库进行朗读。

或者提供能完成以上功能的其他方式的源码也可以。

6个回答

llzhaoyun
llzhaoyun   2015.03.10 17:52

你好,请问以上代码直接写在main方法里运行就有效果吗?
new Variant(message)中的message是朗读的文本吗?

llzhaoyun
llzhaoyun   2015.03.10 17:53

你好,请问以上代码直接写在main方法里运行就有效果吗?
new Variant(message)中的message是朗读的文本吗?

qq948216248
qq948216248   2015.04.27 15:48

你好,请问这个可以可以直接在64位的windows上运行吗?我要实现一个java语音播报功能,但是用jboc总是出错。可以给一份源码我吗?谢了

qq948216248
qq948216248   2015.04.27 15:53

你好,我的机器运行这个会报错。Exception in thread "main" com.jacob.com.ComFailException: Can't get object clsid from progid;
请问你知道哪里出错了吗?求解答,谢谢了

weixin_40973437
weixin_40973437 progid 我也是
大约 2 个月之前 回复
Snake_Zhang
Snake_Zhang 你好 你的问题解决了吗 我现在也是报这个错
10 个月之前 回复
Xunxinqiujiao
Xunxinqiujiao   2015.04.27 17:18

我在win7 64位上运行成功了,需要装微软SAPI的语音引擎(Microsoft Speech API 好像默认就有)。楼下两位的情况感觉是引擎没装上或者是jacob.dll没放好吧,确认放到system32或WOW64下了么?
另外我在找用JNA调用sapi的代码,一致没找到啊,谁能提供些信息。

xueyuyun1205
xueyuyun1205 你好,我在录入Dispatch.call(sapo, "Speak", new Variant("你好"));总是是提示call方方法不支持这3个参数的,让我把后面variant对象删除
大约一年之前 回复
qq948216248
qq948216248 我的win7是精简版的,没有语音引擎,下载可以吗?
接近 3 年之前 回复
qq948216248
qq948216248 Jacob.dll都放好了,但运行就会报错。可以详细些说你是怎么配置的吗?
接近 3 年之前 回复
ligangaisang
ligangaisang   2015.09.21 12:03

楼主你好,我的是win7笔记本,在自己电脑上,一切都正常,把同样的dll文件拷到台式机上,就是没声音,是怎么回事啊

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!