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

使用Azure Speech SDK Go版流式语音转文字遇超时的解决方法

解决Azure Speech SDK Go语言流输入语音转文字超时问题

以下是针对你代码中问题的具体修复方案:

  • 写完数据后必须关闭推送流
    Speech SDK会持续等待音频输入,若不主动关闭流,服务端会因等待更多数据触发超时。在Write操作后添加关闭逻辑:

    err = audioInputStream.Write(audioBytes[44:])
    if err != nil {
        fmt.Println("write :", err)
        return
    }
    // 关键:告知SDK音频流已结束
    audioInputStream.Close()
    
  • 明确指定音频格式
    默认创建的流格式可能与你的音频数据不匹配,导致SDK无法解析有效数据进而超时。根据你的音频实际参数(比如16kHz单声道16位PCM)创建对应格式:

    // 按实际音频格式配置,示例为16kHz、16位、单声道PCM
    audioFormat, err := audio.NewAudioFormat(audio.SampleRate16KHz, audio.BitsPerSample16, audio.Channel1)
    if err != nil {
        fmt.Println("Create audio format err:", err)
        return
    }
    // 使用指定格式创建推送流
    audioInputStream, err2 := audio.CreatePushAudioInputStreamFromFormat(audioFormat)
    

    需确保该格式与你去掉44字节WAV头后的PCM数据完全一致。

  • 调整识别客户端超时参数
    若音频较长或网络延迟高,可通过SpeechConfig延长超时时间:

    speechConfig, err := speech.NewSpeechConfigFromSubscription("你的订阅密钥", "服务区域")
    if err != nil {
        fmt.Println("Create speech config err:", err)
        return
    }
    // 设置连接超时(单位:毫秒,示例30秒)
    speechConfig.SetProperty(speech.PropertySpeechConnectionTimeout, "30000")
    // 设置识别超时(示例60秒)
    speechConfig.SetProperty(speech.PropertySpeechRecognitionTimeout, "60000")
    
  • 验证音频数据完整性
    确认audioBytes[44:]是有效PCM数据:

    • 检查原音频是否为无压缩的WAV格式(若为MP3等压缩格式,需先解码为PCM)
    • 验证解码后的字节长度是否符合格式要求(比如16kHz单声道16位PCM,每秒对应32000字节)
  • 补全完整识别流程
    确保你已实现完整的识别逻辑,启动识别并等待结果:

    recognizer, err := speech.NewSpeechRecognizerFromConfig(speechConfig, audioConfig)
    if err != nil {
        fmt.Println("Create recognizer err:", err)
        return
    }
    defer recognizer.Close()
    
    // 启动单次识别并等待结果
    result, err := recognizer.RecognizeOnceAsync().WaitForCompletion()
    if err != nil {
        fmt.Println("Recognition err:", err)
        return
    }
    
    // 处理识别结果
    switch result.Reason {
    case speech.ResultReasonRecognizedSpeech:
        fmt.Println("识别结果:", result.Text)
    case speech.ResultReasonNoMatch:
        fmt.Println("无匹配结果:", result.NoMatchDetails)
    case speech.ResultReasonCanceled:
        cancelDetails := result.CanceledDetails
        fmt.Println("识别取消:", cancelDetails.Reason)
        if cancelDetails.Reason == speech.CancelReasonError {
            fmt.Println("错误详情:", cancelDetails.ErrorDetails)
        }
    }
    

内容的提问来源于stack exchange,提问作者wcu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:44:57