You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 18:32:57