开放能力
开发平台
行业应用
生态合作
开发与教学
资讯 社区 控制台
技术能力
语音技术
图像技术
文字识别
人脸与人体识别
视频技术
AR与VR
自然语言处理
知识图谱
数据智能
场景方案
部署方案
行业应用
智能教育
智能医疗
智能零售
智能工业
企业服务
智能政务
智能农业
信息服务
智能园区
智能硬件
语音技术

    集成指南

    兼容性

    类别 兼容范围
    系统 支持Android 2.3 以上版本 API LEVEL 9
    机型 上市的android手机和平板。对其它android设备及订制系统不做官方支持
    硬件要求 要求设备上有麦克风
    网络 支持移动网络(包括2G等)、WIFI等网络环境
    开发环境 建议使用最新版本Android Studio 进行开发

    版本更新

    日期 jar文件版本 更新内容
    2020-07-21 com.baidu.tts_2.6.2.2.20200629_44818d4.jar 增加2个精品音库,调整合成字节数
    2020-05-21 com.baidu.tts_2.6.1.109.20200424_be04a21.jar bug修复
    2020-03-19 com.baidu.tts_2.6.1.108.20200217_5adcfb6.jar

    NDK so库架构

    共计5个架构目录:armeabi,armeabi-v7a,arm64-v8a,x86,x86_64,每个架构下均有以下1个so库文件。

    如果为了节省安装包体积,可以只使用armeabi目录,性能损失微小。

    资源名称 资源大小
    libBDSpeechDecoder_V1.so 约400k

    如果仅需要在线功能,并且不需要使用压缩传输,仅需要保留ibBDSpeechDecoder_V1.so。

    // 仅需要在线合成并不使用压缩传输 
    mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_AUDIO_ENCODE, SpeechSynthesizer.AUDIO_ENCODE_PCM);
    mSpeechSynthesizer.setParam(SpeechSynthesizer.PARAM_AUDIO_RATE, SpeechSynthesizer.AUDIO_BITRATE_PCM);

    DEMO压缩包说明

    DEMO压缩包下载即可运行,其中DEMO内已经附带了SDK的库。

    • com.baidu.tts_x.x.x.xxxxx_xxxxx.jar 位于 app/libs 目录下。
    • armeabi,armeabi-v7a,arm64-v8a,x86,x86_64 5个架构目录位于app\src\main\jniLibs 目录下

    DEMO 测试

    demo中已经填写了默认的测试信息(并发受限),可以直接运行测试。

    可以在百度云网站上申请自己语音合成的应用后,会有appId、appKey、appSecret及android包名 4个鉴权信息, 修改app/src/main/assets/auth.properties 里的4个字段 , 并修改app/build.gradle里 defaultConfig.applicationId为包名:

    # 在线Android SDK 鉴权信息
    ## 1.修改这个文件4个鉴权信息
    ## 2.修改app/build.gradle里 defaultConfig.applicationId为你网页上应用填写的android包名
    
    # 网页上应用的appId,申请纯离线SDK鉴权的必备信息
    appId:110xxx57
    # 网页上应用的appKey, 在线模式和离在线混合模式需要。
    appKey:OvcxxxxxxxxsFFncG1
    # 网页上应用的secretKey, 在线模式和离在线混合模式需要。
    secretKey:e72ebb6xxxxxxxxxxe6706e2
    # 包名,这个值必须和app/build.gradle 里 defaultConfig.applicationId一致,即必须为context.getPackageName()
    applicationId:com.baidu.tts.sample

    集成指南

    • DEMO 中已经集成了 SDK。您可以参考DEMO,集成SDK。
    • 集成前,请先测通DEMO,了解调用原理。
    • 如果您自己代码过于复杂,可以使用一个helloworld项目了解集成过程。

    AndroidManifest.xml 文件

    设置权限:

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

    支持level 28以上编译

    <uses-library android:name="org.apache.http.legacy" android:required="false"/>

    设置AppId, AppKey, SecretKey

    mSpeechSynthesizer.setAppId(appId);
    mSpeechSynthesizer.setApiKey(appKey, secretKey);

    android 6.0 以上版本权限申请

    以下代码可以在demo中查找

    /**
     * android 6.0 以上需要动态申请权限
      */
     private void initPermission() {
         String permissions[] = {
                 Manifest.permission.INTERNET,
                 Manifest.permission.ACCESS_NETWORK_STATE,
                 Manifest.permission.MODIFY_AUDIO_SETTINGS,
                 Manifest.permission.ACCESS_WIFI_STATE,
                 Manifest.permission.CHANGE_WIFI_STATE
         };
    
         ArrayList<String> toApplyList = new ArrayList<String>();
    
         for (String perm : permissions) {
             if (PackageManager.PERMISSION_GRANTED != ContextCompat.checkSelfPermission(this, perm)) {
                 toApplyList.add(perm);
                 //进入到这里代表没有权限.
             }
         }
         String tmpList[] = new String[toApplyList.size()];
         if (!toApplyList.isEmpty()) {
             ActivityCompat.requestPermissions(this, toApplyList.toArray(tmpList), 123);
         }
    
     }
    
    
     @Override
     public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
         // 此处为android 6.0以上动态授权的回调,用户自行实现。
     }

    引入jar包

    com.baidu.tts_2.6.*.jar 库 将app/libs/com.baidu.tts_2.6.xxxxxx.jar复制到您的项目的同名目录中。确认在build.gradle文件中引入。

    复制NDK 架构目录

    1. 将 app/src/main/jniLibs 下armeabi等5个目录,复制到您的项目的同名目录中。
    2. 如与第三方库集成,至少要保留armeabi目录。如第三方库有7个架构目录,比语音合成SDK多出2个目录 mips和mips64,请将mips和mips64目录删除,剩下5个同名目录合并。
    3. 如第三方库仅有armeabi这一个目录,请将语音合成SDK的额外4个目录如armeabi-v7a删除,合并armeabi目录下的so。 即目录取交集,so文件不可随意更改所属目录。
    4. 打包成apk文件,按照zip格式解压出libs目录可以验证。
    5. 运行时 getApplicationInfo().nativeLibraryDir 目录下查看是否有完整so文件。 特别是系统app需要手动push so文件到这个目录下。

    build.gradle 文件及包名确认

    1. 根目录下build.gradle确认下gradle的版本。
    2. 确认 compileSdkVersion buildToolsVersion 及 targetSdkVersion, API LEVEL 28的编译产物在android 9.0系统上运行需要在app/src/main/AndroidManifest.xml 里添加 <uses-library android:name="org.apache.http.legacy" android:required="false"/>

    proguard 混淆文件

        -keep class com.baidu.tts.**{*;}
        -keep class com.baidu.speechsynthesizer.**{*;}

    BEST PRACTICE

    • 请先测通DEMO,了解DEMO的功能,代码的运行原理后再集成。DEMO有bug,请立即反馈。
    • 对应任何第三方库,从一开始集成,边开发边测试,不要等所有功能都开发完再集成。否则一旦有问题,难以隔离排查。
    • 有问题先与DEMO做对比。DEMO有bug,请查看错误码文档,如无法解决请立即反馈;DEMO无bug,自身代码有问题,请设置同样的输入参数后,对比两边代码及日志,自行排查问题。
    上一篇
    简介
    下一篇
    接口及调用过程