资讯 社区 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

集成指南

兼容性

类别 兼容范围
系统 支持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.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,自身代码有问题,请设置同样的输入参数后,对比两边代码及日志,自行排查问题。