Skip to content

基于百度合成语音的语音合成工具类

Notifications You must be signed in to change notification settings

LyounJAP/TTSRadioLib

Repository files navigation

TTSRadioLib

基于百度合成语音的语音合成工具类

1、可灵活自定义语音播报文件和播报内容。

2、支持播放在线合成语音、离线语音。

3、自动检测当前网络状况,切换在线合成播报和离线播报模式。

4、支持播报特殊声音,比如童音、女音,可灵活设置。

5、封装了整合百度合成语音的具体细节、集成了合成语音sdk,调用简单。

6、可自由替换自己项目的百度合成语音鉴权文件。

7、即时播放,不受其它语音播报干扰。

8、网络质量不好,会有一定程度影响在线合成语音的播报效果。

9、离线语音播报,需要提前准备好相关的语音文件,在线合成的语音文件可作为离线播报的音频文件。

10、基于百度合成语音免费版整合而成。

项目集成:

只需要5步即可将合成语音集成进你的项目:

第一步:将语音合成工具包TTSRadioLib.aar,拷贝到你项目工程下的libs文件夹下。

第二步:在你项目modul的build.gradle文件中加入aar目录声明:

android{

...

//声明libs目录

repositories {

flatDir {

    dirs 'libs'   // aar目录
    
}

}

...

}

第三步:在dependencies下引入arr文件依赖:

dependencies{

...

//引入语音依赖

implementation(name: 'TTSRadioLib', ext: 'aar')

...

}

第四步:自定义Application的onCreate方法中,初始化语音Speaker:

public class Application extends android.app.Application {

@Override

public void onCreate() {

    //设置特殊语音
    
    Param.setParam("4","6");
    
    //初始化语音
    
    MySpeaker mSpeaker = MySpeaker.getInstance(this);
    
    if (mSpeaker != null) {
    
        //传入自己的Auth认证,与assets下的auth.properties配合使用
        
        Auth auth = Auth.getInstance(this);
        
        mSpeaker.init(true,auth);

// //常规方法

// mSpeaker.init(true);

    }
    
    super.onCreate();
    
}

}

第五步:将自定义Application引入到manifest配置文件中,添加name属性值:

<application android:name=".Application" android:allowBackup="true" android:icon="@mipmap/ic_launcher"

================================================================================================

播报语音:

//获取语音工具类实例

mSpeaker = MySpeaker.getInstance(this);

//语音播报前,判空处理,contents二维数组是播报的具体内容,contents[0]:播报文件的文件名,contents[1]:播报的语音内容

if (mSpeaker != null) {

contents = PlayContent.getContent(PlayContent.Index.avoid.ordinal());

if(contents != null && contents.length == 2){

  mSpeaker.speak(contents[0],contents[1]);

}

}

================================================================================================

自定义语音播报内容:

自定义PlayContent这个类就好,播报时直接调用这个类中的内容进行播报,需注意的是,枚举Index的长度需和二维数组contents长度一致:

public class PlayContent {

//语音播放文件名集合
public enum Index {
    avoid,
    bad,
    beginmove,
    cancel,
    finish,
    gopower,
    power,
    select,
    ydyl,
    zudang
}

//二维数组中的一维长度,跟Index项目数相等,跟Index中的顺序一致,二维长度为2,0-文件名,1-播报内容

public static final String[][] contents = new String[][]{
        {"avoid", "请避让"},  //播报内容可考虑加入空格、‘,’逗号来调整播报效果,如: "请 避让" ,或者 "请,避让" ,中间会产生一种停顿效果
        {"bad", "出现故障"},  //播报内容还可在单个文字后面加上(字拼音,音调来实现发音多音字), 如: "请避让(rang4)" 读第4声
        {"beginmove", "出发了"},
        {"cancel", "取消了"},
        {"finish", "任务完成"},
        {"gopower", "该休息了"},
        {"power", "准备补充能量"},
        {"select", "请选择"},
        {"ydyl", "欢迎您"},
        {"zudang", "被挡住了"},
};

//通过传入数组下标的方式,获取该播报的文件名和语音内容
public static String[] getContent(int index) {
    if (index >= contents.length) {
        throw new ArrayIndexOutOfBoundsException();
    }
    return contents[index];
}

}

================================================================================================

播报特殊声音:

播报特殊声音是通过Param.setParam方法来实现的,他要求在Application初始化语音工具类之前调用,通过调整合成语音播音员、语调、语速、音量的方式,灵活实现多种特殊的声音效果:

//设置特殊语音-童音

Param.setParam("4","6");

//设置特殊语音-女声

Param.setParam("0","5");

//设置特殊语音-普通男声

Param.setParam("1","5");

//设置特殊语音-情感男声

Param.setParam("3","5");

================================================================================================

替换自己的百度合成语音鉴权文件(推荐):

第一步:找到你项目工程的app/src/main目录,点击新建assets文件夹。

第二步:将鉴权文件auth.properties拷贝到assets文件夹中。

第三步:将文件中的appId、appKey、secretKey、applicationId值,分别替换成你在百度开发者平台上申请的合成语音应用的AppID、API Key、Secret Key、包名,包名即你当前项目的manifest文件中package的值。

第四步:在Application初始化语音工具类之前,传入自己项目的Auth认证:

if (mSpeaker != null) {

//传入自己的Auth认证,与assets下的auth.properties配合使用

Auth auth = Auth.getInstance(this);

mSpeaker.init(true,auth);

//常规方法

// mSpeaker.init(true);

}

================================================================================================

代码混淆:

-keep class top.lyoun.ttsradiolib.radio.**{*;}

================================================================================================

免责声明:

1、本项目集成了百度合成语音免费版,使用过程中并不产生任何额外费用。

2、本项目封装了整合百度合成语音的具体细节,结合自己的实际开发工作经验整合而成,除了百度合成语音自身sdk和借鉴了1个优秀的离线语音播放工具类之外,其它均为原创。

3、本项目作为自己学习和工作用途,是工作一定经验后,对自己写的工具类的总结、抽象、封装,以便以后二次调用,或供其它人调用。

4、语音播报功能强大,可自定义语音播报内容、文件,灵活调整语音播报效果,本项目并不对语音播报内容负责,希望广大调用者”文明用语“。

5、未经许可,禁止转载、售卖、二次发布。

6、百度这个合成语音免费是有期限和次数限制的,默认好像是180天,5万次,如果发现合成语音不能用了,直接去百度合成语音控制台开通付费就好。这套代码不需要改。