Azure文本转语音SDK与REST API离线使用及语音自动下载问询
Azure文本转语音离线语音包实现方案(Kotlin)
Azure Cognitive Services Speech SDK支持离线文本转语音功能,但需要手动预先下载支持离线的神经语音包,而非自动下载。以下是具体实现步骤:
核心前提
只有标记为「Offline-capable」的神经语音(Neural TTS)支持离线使用,你可以通过SDK API筛选这类语音。
实现步骤
1. 初始化SpeechConfig(需在线验证一次)
即使要离线使用,首次初始化仍需在线验证订阅信息,后续离线场景可直接复用配置:
val speechConfig = SpeechConfig.fromSubscription("你的订阅密钥", "所属区域")
2. 获取支持离线的语音列表
通过SDK API获取所有语音,过滤出可离线使用的选项:
val synthesizer = SpeechSynthesizer(speechConfig) val voicesResult = synthesizer.getVoicesAsync().get() // 筛选支持离线的语音 val offlineAvailableVoices = voicesResult.voices.filter { it.isOfflineCapable } // 检查目标语音是否支持离线(比如en-IN-NeerjaNeural) val targetVoice = offlineAvailableVoices.find { it.name == "en-IN-NeerjaNeural" }
3. 下载指定语音包
确认目标语音支持离线后,调用SDK的下载接口获取语音包:
targetVoice?.let { voice -> synthesizer.downloadVoiceAsync(voice) .addOnSuccessListener { // 语音包已成功下载到SDK默认本地存储路径 } .addOnFailureListener { exception -> // 处理下载异常:网络问题、权限不足、订阅无效等 } }
4. 离线状态下使用文本转语音
设备离线时,直接指定已下载的语音名称,SDK会自动优先使用本地语音包:
// 配置语音名称(需确保已下载) speechConfig.speechSynthesisVoiceName = "en-IN-NeerjaNeural" val synthesizer = SpeechSynthesizer(speechConfig) val synthesisResult = synthesizer.speakTextAsync("离线文本转语音测试").get() when (synthesisResult.reason) { ResultReason.SynthesizingAudioCompleted -> { // 合成成功,处理音频播放 val audioData = synthesisResult.audioData // 此处添加音频播放逻辑 } else -> { // 处理错误:语音包未下载、配置错误等 val errorDetails = synthesisResult.errorDetails } }
注意事项
- 普通标准语音(非神经语音)不支持离线使用,仅部分神经语音提供离线能力。
- 语音包下载需设备在线,且订阅密钥需有效;后续离线使用无需再次联网验证,但订阅不能过期。
- Android平台需确保应用拥有对应存储权限,否则下载会失败。
- 语音包存储路径由SDK自动管理,无需手动指定,SDK会自动识别本地已下载的语音资源。
内容的提问来源于stack exchange,提问作者Lazaros web
相关产品推荐
相关产品推荐

