[Android]百度文字合成语音集成过程记录
百度文字转语音集成简述
集成后的demo:
前提
- 在百度智能云-语音技术创建一个应用,包名后面建好APP后修改为你要用的APPID
- 记录下
APP_ID
API_KEY
SECRET_KEY
三项值
包名Package name:你的包名填在创建的应用的里面 - 在sdk下载页面中.选择语音合成-离在线融合SDK-android.进行下载,解压之后用AS打开.先确保将官方demo的源代码通过android studio在android真机上运行起来并且测试成功
开始集成
1. 权限加到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.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
2. 添加依赖
- 将
com.baidu.tts_2.3.2.20180713_6101c2a.jar
加入到项目依赖,该文件位于demo中的app\libs\ - 将jni文件复制到自己项目,位于app\src\main\jniLibs
3. 代码集成
- 复制MiniActivity.kt中代码及相关文件到自己的项目
改写initTTs()
方法,demo中为了说明流程,故意在UI线程中调用。
实际集成中,该方法一定在新线程中调用,并且该线程不能结束。
可以使用协程处理
uiScope.launch {
val deffer = async(Dispatchers.Default) {
initTTs()
}
deffer.await()
}
-
根据开始记录的修改其中的appId,appKey,secretKey
-
在把界面修改成自己想要的样子,或者把整个流程做成后台服务
至此集成在线文字转语音已经完成
集成离线合成
修改
// TtsMode.MIX; 离在线融合,在线优先; TtsMode.ONLINE 纯在线; 没有纯离线
private val ttsMode = TtsMode.MIX
将demo中的assets
目录下5个bat
文件放到项目中的assets
中
在程序中,复制到设备本地储存
private val TEMP_DIR = SystemConfig.baiduPath
private val fileList = listOf(
"bd_etts_common_speech_as_mand_eng_high_am_v3.0.0_20170516.dat",
"bd_etts_common_speech_f7_mand_eng_high_am-mix_v3.0.0_20170512.dat",
"bd_etts_common_speech_m15_mand_eng_high_am-mix_v3.0.0_20170505.dat",
"bd_etts_common_speech_yyjw_mand_eng_high_am-mix_v3.0.0_20170512.dat",
"bd_etts_text.dat"
)
init {
fileList.forEach {
ResourceUtils.copyFileFromAssets(it, TEMP_DIR + File.separator + it)
}
}
至此全部集成完毕,根据需求修改代码,更多参数及意义可以参照官方文档