zoukankan      html  css  js  c++  java
  • Android中文TTS

    如今在Android中开发中文语音播报有各式各样的云服务、SDK、API等云云,但是大部分服务是需要联网支持来进行语音合成的,在中文语音合成方面,科大讯飞无疑是佼佼者,而且它也提供了离线语音合成包(需要按分发数量和使用时间付费)的下载。

    Android原生API本身也就提供了TTS功能,我们可以使用TextToSpeech类通过简单几行代码就能把想发音的文字播报出来,方法如下:

    1、首先需要实例化TextToSpeech类,在TextToSpeech的构造函数中,需要提供一个OnInitListener对象用于完成对TextToSpeech对象的初始化设置,在OnInitListener对象中需要实现onInit方法,我们可以在该方法内来调用setLanguage方法

    来设置语言类型,Local.CHINA为中文,设置完后判断当前系统是否支持要发音的语言,代码如下:

    @Override
    public void onInit(int status) {
      if (status == TextToSpeech.SUCCESS) {
        int result = textToSpeech.setLanguage(Locale.CHINA);
        if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) 
        {
          Toast.makeText(this, "LANG_MISSING_DATA  or LANG_NOT_SUPPORTED
    !", Toast.LENGTH_SHORT).show();
        }
      }
    }

    2、然后需要发音的地方调用TextToSpeech实例对象的speak方法即可完成语音播报,在播报前可以通过调用setPitch方法来设置音调,默认值为1,数值越大音调越高,代码如下:

    textToSpeech.setPitch(1.5f); // 在系统设置里也可以修改音调
    textToSpeech.speak("你好, 我们来测试一下语音功能!”, TextToSpeech.QUEUE_FLUSH, null);

    3、使用TextToSpeech进行语音播报使用的语言数据时设备上Android系统设置的TTS语音包,默认是不支持中文的,以我的测试平板为例,默认TTS包是Pico TTS,仅支持英文、法文、德文、意大利文及西班牙文等几种语言,如图所示:

    4、Android系统支持自定义第三方TTS语音库,我们可以下载安装一个“讯飞语音+”, 并在系统语音设置中将TTS切换选择成“讯飞语音+”,如图所示:

    之后,我们就可以成功TTS播报中文了!

    ---Done---

  • 相关阅读:
    学习算法必备数学
    Use NDepend to Measure How SOLID Your Code Is
    使用Docker 快速体验TDengine
    ASP.NET Core 修改开源协议为MIT,.NET全平台 MIT协议开源了
    DNS泛域名解析应用(nip.io/sslip.io)
    对象池在 .NET (Core)中的应用[3]: 扩展篇
    对象池在 .NET (Core)中的应用[2]: 设计篇
    对象池在 .NET (Core)中的应用[1]: 编程篇
    项目组织结构的3种类型:职能型、项目型和矩阵型
    [LeetCode] 1208. Get Equal Substrings Within Budget 尽可能使字符串相等
  • 原文地址:https://www.cnblogs.com/arthurymn/p/5672974.html
Copyright © 2011-2022 走看看