网页语音合成API运行无效果问题处理

网页语音合成API简介


h5提供了语音合成的api,包括SpeechSynthesis、SpeechSynthesisUtterance,具体使用方法可参考语音合成(TTS)应用方案一二三_成江的博客-CSDN博客,现在的mdn上介绍说这是一个实验中的功能,但是从兼容性列表可以看到,除了移动端的opera和安卓webview,支持性是很友好的。



情景1、操作系统不支持tts功能


尽管上面提到了api的兼容性是很友好的,不代表就能够顺利的运行,因为这个api还依赖于系统的朗读引擎,有的ghost或是精简版的windows系统会可能对其进行了删改。
解决办法是要把它再装回来即可,搜索下载[tts修复补丁],按照对应下载程序的步骤安装即可。如

win7系统tts语音引擎修复补丁|tts语音引擎修复补丁win7 官方最新版 下载_当下软件园_软件下载

(经过多台win7测试这个链接的补丁不总是有效)


判断系统是否有这个功能,可以看[控制面板-轻松访问-轻松访问中心-使用没有显示器的计算机]中“设置文本到语言转换”操作中进行试行,如果不支持,会有如下提示




情景2、api执行但是没有声音


执行播放方法,但是没有任何声音,该问题定位下来是由于系统的语音包没有被正确选择。
SpeechSynthesisUtterance有两个属性可以设置语音包,第一个是通过lang来设置语言,比如设置为'zh-CN',根据系统安装的应用程序,同一个lang下面可能会存在多个语言包,系统就会自动匹配一个满足这个条件的语音包,问题就出现在这里,系统匹配的这个语音包如果是第三方的,在网页语音合成中可能无法使用,线上遇到的问题也是这个造成的。如下图所示,



调用getVoices方法可以看到,这有两个zh-CN,而且第一个default为true的是第三方软件安装的,匹配到这个导致无法播放。
第二个设置语音包的方法是可以直接设置SpeechSynthesisUtterance.voice,赋值即为上面getVoices获取的对象。这里的话设置成name为“Microsoft Simmplified Chinese”即可,注意,不同的浏览器name可能会不同,比如在chrome浏览器中就是“Google 普通话(中国大陆)”。


localService和default的属性似乎不太值得信任,最终解决方案选择找到安装了第三方的应用将其删除解决,如果这个应用不能够被删除的话,目前看来通过name进行自行匹配,或者直接提供手动选择的方式更加可靠。
向电脑添加语音方法见

附录 A:支持的语言和语音

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
好的,下面是JavaAPI方式语音合成的示例代码: 首先需要在百度AI开放平台注册账号并创建应用,获取App ID、API Key和Secret Key。然后在项目中导入百度AI开放平台提供的Java SDK。 示例代码如下: ```java import com.baidu.aip.speech.AipSpeech; import com.baidu.aip.speech.TtsResponse; import org.json.JSONObject; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; public class SpeechSynthesis { // 设置APPID/AK/SK public static final String APP_ID = "your_app_id"; public static final String API_KEY = "your_api_key"; public static final String SECRET_KEY = "your_secret_key"; public static void main(String[] args) throws IOException { // 初始化一个AipSpeech AipSpeech client = new AipSpeech(APP_ID, API_KEY, SECRET_KEY); // 设置可选参数 JSONObject options = new JSONObject(); options.put("spd", "5"); //语速取值0-15,默认为5中语速 options.put("vol", "15"); //音量取值0-15,默认为5中音量 options.put("per", "1"); //发音人选择,0为女声,1为男声,3为情感合成-度逍遥,4为情感合成-度丫丫 // 调用接口 TtsResponse res = client.synthesis("百度语音合成测试", "zh", 1, options); // 保存语音文件 byte[] data = res.getData(); File file = new File("output.mp3"); FileOutputStream fos = new FileOutputStream(file); fos.write(data); fos.flush(); fos.close(); } } ``` 其中,需要替换掉代码中的`your_app_id`、`your_api_key`和`your_secret_key`为自己应用的对应信息。 运行程序后,会在项目目录下生成一个名为`output.mp3`的语音文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值