跳到主要内容

TTS语音播报模块

📋 模块概述

TTS(Text-To-Speech)语音播报模块提供文字转语音功能,支持中英文播报、音频文件播放、多语言切换等。

核心类: android.znhaas.utils.TtsManager

音频播放: android.znhaas.util.SoundPlayer

🎯 主要功能

  • ✅ 文字转语音(中文/英文)
  • ✅ 预置音频文件播放
  • ✅ TTS引擎管理
  • ✅ 自动重试机制
  • ✅ 音量控制
  • ✅ 多语言支持

📚 核心API

1. 获取实例

val ttsManager = TtsManager.getInstance(context)

2. 初始化

ttsManager.initialize(object : TtsManager.TtsCallback {
override fun onTtsReady() {
Log.d(TAG, "TTS准备就绪")
}

override fun onTtsError(message: String) {
Log.e(TAG, "TTS错误: $message")
}

override fun onTtsInitializing() {
Log.d(TAG, "TTS初始化中...")
}
})

3. 播放文本

// 播放中文
ttsManager.speak("录制已开始")

// 播放英文
ttsManager.speak("Recording started")

4. 播放预置音频

// 使用SoundPlayer播放预置音频
val soundPlayer = SoundPlayer.getInstance(context)

// 播放录制开始提示音
soundPlayer.playSound(R.raw.tts_recording_started)

// 播放拍照成功提示音
soundPlayer.playSound(R.raw.tts_photo_success)

// 播放报警音
soundPlayer.playSound(R.raw.sos_successful)

5. 停止播放

ttsManager.stop()

6. 设置语言

// 设置中文
ttsManager.setLanguage(Locale.CHINESE)

// 设置英文
ttsManager.setLanguage(Locale.ENGLISH)

7. 释放资源

TtsManager.destroyInstance()

🔧 完整使用示例

class TtsActivity : AppCompatActivity() {

private lateinit var ttsManager: TtsManager
private lateinit var soundPlayer: SoundPlayer

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_tts)

// 初始化TTS
ttsManager = TtsManager.getInstance(this)
ttsManager.initialize(ttsCallback)

// 初始化音频播放器
soundPlayer = SoundPlayer.getInstance(this)

// 播放文本按钮
speakButton.setOnClickListener {
val text = textInput.text.toString()
ttsManager.speak(text)
}

// 播放提示音按钮
soundButton.setOnClickListener {
soundPlayer.playSound(R.raw.tts_recording_started)
}
}

private val ttsCallback = object : TtsManager.TtsCallback {
override fun onTtsReady() {
runOnUiThread {
statusText.text = "TTS就绪"
speakButton.isEnabled = true
}
}

override fun onTtsError(message: String) {
runOnUiThread {
statusText.text = "TTS错误: $message"
speakButton.isEnabled = false
}
}

override fun onTtsInitializing() {
runOnUiThread {
statusText.text = "TTS初始化中..."
speakButton.isEnabled = false
}
}
}

override fun onDestroy() {
super.onDestroy()
ttsManager.stop()
}
}

📁 预置音频文件

项目包含大量预置音频文件,位于app/src/main/assets/sounds/:

中文音频 (zh/)

  • tts_recording_started.wav - 录制已开始
  • tts_recording_stopped.wav - 录制已停止
  • tts_photo_success.wav - 拍照成功
  • tts_bluetooth_connected.wav - 蓝牙已连接
  • tts_low_power.wav - 电量低
  • 等等...

英文音频 (en/)

  • tts_recording_started.wav - Recording started
  • tts_recording_stopped.wav - Recording stopped
  • tts_photo_success.wav - Photo taken
  • 等等...

使用预置音频

// 播放中文提示音
soundPlayer.playSound(R.raw.tts_recording_started)

// 播放英文提示音
soundPlayer.playSound(R.raw.en_tts_recording_started)

⚠️ 注意事项

1. TTS引擎依赖

  • Android系统自带TTS引擎
  • 部分设备可能需要下载语音数据
  • 首次使用可能需要延迟初始化

2. 音量控制

TTS使用媒体音量通道:

audioManager.setStreamVolume(
AudioManager.STREAM_MUSIC,
volume,
0
)

3. 自动重试

TTS初始化失败会自动重试(最多3次):

private const val MAX_RETRIES = 3
private const val RETRY_DELAY_BASE = 2000L

4. 线程安全

  • TTS操作已在主线程处理
  • 回调在主线程执行
  • 可以直接更新UI

🔗 相关资源

  • 源码:

    • app/src/main/java/android/znhaas/utils/TtsManager.kt
    • app/src/main/java/android/znhaas/util/SoundPlayer.kt
  • 音频资源: app/src/main/assets/sounds/

📚 扩展阅读