共计 2684 个字符,预计需要花费 7 分钟才能阅读完成。
背景介绍
语音合成技术(TTS)在移动应用中扮演着重要角色,比如语音助手、有声读物、导航提示等场景。讯飞语音合成 SDK 凭借其自然流畅的语音效果、丰富的音色选择和稳定的性能,成为国内开发者的首选方案。

相比其他方案,讯飞 SDK 有以下优势:
- 支持多种语言和方言
- 提供多种音色可选(男声、女声、童声等)
- 合成速度快,延迟低
- 对中文支持特别优秀
环境配置
1. SDK 下载
首先需要到讯飞开放平台(https://www.xfyun.cn/)注册账号并创建应用,获取对应的 AppID。下载 Android SDK 包,通常包含以下内容:
- aar 库文件
- so 动态库文件
- 示例代码
- 文档
2. 权限配置
在 AndroidManifest.xml 中添加必要权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
注意:Android 6.0+ 需要动态申请运行时权限。
3. 初始化 SDK
在 Application 类中进行初始化:
class MyApp : Application() {override fun onCreate() {super.onCreate()
// 设置初始化参数
val params = SpeechUtility.createParam(this)
.apply {addParam(SpeechConstant.APP_ID, "你的 AppID")
addParam(SpeechConstant.ENGINE_MODE, SpeechConstant.MODE_MSC)
}
SpeechUtility.createUtility(params)
}
}
核心功能实现
1. 基础文本转语音
class TTSHelper(private val context: Context) {
private var mTts: SpeechSynthesizer? = null
fun init() {
mTts = SpeechSynthesizer.createSynthesizer(context, object : InitListener {override fun onInit(code: Int) {if (code != ErrorCode.SUCCESS) {Log.e("TTS", "初始化失败, 错误码:$code")
}
}
})
// 设置参数
mTts?.apply {setParameter(SpeechConstant.VOICE_NAME, "xiaoyan") // 设置发音人
setParameter(SpeechConstant.SPEED, "50") // 设置语速
setParameter(SpeechConstant.VOLUME, "80") // 设置音量
setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD) // 设置云端模式
}
}
fun speak(text: String) {
mTts?.startSpeaking(text, object : SynthesizerListener {override fun onSpeakBegin() {// 开始播放}
override fun onCompleted(error: SpeechError?) {
error?.let {Log.e("TTS", "播放出错: ${error.errorCode} - ${error.errorDescription}")
}
}
// 其他回调方法...
})
}
fun release() {mTts?.destroy()
}
}
2. 处理回调
SynthesizerListener 提供了多个回调方法,可以监控语音合成的各个阶段:
- onSpeakBegin:开始播放
- onBufferProgress:合成进度
- onSpeakProgress:播放进度
- onCompleted:播放完成
- onEvent:特殊事件
性能优化
1. 减少合成延迟
- 使用本地合成模式(TYPE_LOCAL)而非云端模式(TYPE_CLOUD)
- 预加载常用语音内容
- 适当降低音质参数(如采样率)
2. 内存优化
- 及时释放 SpeechSynthesizer 实例
- 避免频繁创建 / 销毁 TTS 引擎
- 使用单例模式管理 TTS 实例
3. 实测数据
在测试设备(Redmi Note 10 Pro)上的表现:
| 模式 | 首次合成耗时 | CPU 占用 | 内存占用 |
|---|---|---|---|
| 云端 | 500-800ms | 5-10% | 30MB |
| 本地 | 100-300ms | 15-20% | 50MB |
避坑指南
- 权限问题
- 确保所有必要权限都已获取
-
Android 10+ 需要添加 android:requestLegacyExternalStorage=”true”
-
初始化失败
- 检查 AppID 是否正确
- 确认网络连接正常
-
查看 Logcat 中的详细错误信息
-
没有声音
- 检查设备音量是否开启
- 确认没有其他音频在播放
-
测试不同的发音人
-
中文乱码
- 确保文本是 UTF- 8 编码
- 避免特殊字符
高级功能
- 自定义音频输出
可以获取 PCM 数据自己处理:
setParameter(SpeechConstant.TTS_AUDIO_FORMAT, "pcm")
setParameter(SpeechConstant.KEY_REQUEST_FOCUS, "false")
- 离线语音包
可以下载离线语音包减少网络依赖:
mTts?.downloadVoice("xiaoyan", null, downloadListener)
- 合成到文件
直接将结果保存为音频文件:
setParameter(SpeechConstant.TTS_AUDIO_PATH, filePath)
synthesizeToUri(text, params)
实践建议
建议尝试实现一个简单的语音朗读应用,包含以下功能:
- 文本输入框
- 发音人选择
- 语速 / 音量调节
- 播放控制(暂停 / 继续 / 停止)
- 保存语音到文件
通过这个完整流程,你将全面掌握讯飞语音合成 SDK 的使用方法。在实际项目中,可以根据需求进一步优化和扩展功能。
正文完
