排查语音 SDK 问题

本文提供的信息可帮助你解决在使用语音 SDK 时可能遇到的问题。

验证失败

你可能会观察到几个身份验证错误之一,具体取决于编程环境、API 或 SDK。 下面是一些示例错误:

  • 是否已设置语音资源密钥和区域值?
  • AuthenticationFailure
  • HTTP 403 禁止访问或 HTTP 401 未授权。 没有有效 Ocp-Apim-Subscription-KeyAuthorization 标头的连接请求将被拒绝,状态为 403 或 401。
  • ValueError:无法使用给定的参数构造 SpeechConfig(或此消息的变体)。 例如,在未设置环境变量的情况下运行适用于 Python 的语音 SDK 快速入门之一时,可能会出现此错误。 将环境变量设置为无效的内容(例如,密钥或区域)时,也可能会看到此错误。
  • 错误代码为 0x5 的异常。 例如,在运行适用于 C# 的语音 SDK 快速入门之一而不设置环境变量时,可能会出现此拒绝访问错误。

有关基线身份验证故障排除提示,请参阅验证资源密钥验证授权令牌。 有关确认凭据的详细信息,请参阅获取资源的密钥

验证你的资源密钥

可以通过运行以下命令之一来验证你拥有有效的资源密钥。

注意

YOUR_RESOURCE_KEYYOUR_REGION 替换为你自己的资源密钥和关联区域。

$FetchTokenHeader = @{
    'Content-type'='application/x-www-form-urlencoded'
    'Content-Length'= '0'
    'Ocp-Apim-Subscription-Key' = 'YOUR_RESOURCE_KEY'
}
$OAuthToken = Invoke-RestMethod -Method POST -Uri https://YOUR_REGION.api.cognitive.azure.cn/sts/v1.0/issueToken -Headers $FetchTokenHeader
$OAuthToken

如果输入了有效的资源密钥,则该命令将返回授权令牌,否则将返回错误。

验证授权令牌

如果使用授权令牌进行身份验证,则可能会看到身份验证错误,因为:

  • 授权令牌无效
  • 授权令牌已过期

如果使用授权令牌进行身份验证,请运行以下命令之一以验证授权令牌是否仍然有效。 令牌的有效期为 10 分钟。

注意

YOUR_AUDIO_FILE 替换为预先录制的音频文件的路径。 将 YOUR_ACCESS_TOKEN 替换为上一步中返回的授权令牌。 将 YOUR_REGION 替换为正确的区域。

$SpeechServiceURI =
'https://YOUR_REGION.stt.speech.azure.cn/speech/recognition/interactive/cognitiveservices/v1?language=en-US'

# $OAuthToken is the authorization token returned by the token service.
$RecoRequestHeader = @{
    'Authorization' = 'Bearer '+ $OAuthToken
    'Transfer-Encoding' = 'chunked'
    'Content-type' = 'audio/wav; codec=audio/pcm; samplerate=16000'
}

# Read audio into byte array.
$audioBytes = [System.IO.File]::ReadAllBytes("YOUR_AUDIO_FILE")

$RecoResponse = Invoke-RestMethod -Method POST -Uri $SpeechServiceURI -Headers $RecoRequestHeader -Body $audioBytes

# Show the result.
$RecoResponse

如果输入了有效的授权令牌,则该命令将返回音频文件的听录,否则将返回错误。

通过 RecognitionStatus 显示 InitialSilenceTimeout

对于单个语句的单步识别,经常会出现此问题。 例如,在以下情况下可能会返回错误:

  • 音频以一段很长的静音开头。 在这种情况下,该服务将在几秒钟后停止识别并返回 InitialSilenceTimeout
  • 音频使用了不受支持的编解码器格式,这导致音频数据被视为静音。

在音频开头有静音是可以的,但前提是使用连续识别

SPXERR_AUDIO_SYS_LIBRARY_NOT_FOUND

例如,当安装了多个版本的 Python 时,或者如果你没有使用受支持的 Python 版本,会返回此错误。 可以尝试使用其他 python 解释器,也可以卸载所有 python 版本,然后重新安装最新版本的 python 和语音 SDK。

HTTP 400 错误请求

当请求正文包含无效的音频数据时,通常会发生此错误。 仅支持 WAV 格式。 此外,请检查请求的标头,以确保为 Content-TypeContent-Length 指定适当的值。

HTTP 408 请求超时

出现该错误很可能是因为未将音频数据发送到服务。 网络问题也可能导致此错误。

后续步骤