From 677f606935b91beb0bf3a829a902e94b1636ea58 Mon Sep 17 00:00:00 2001 From: "3371392206@qq.com" <3371392206@qq.com> Date: Sun, 16 Aug 2026 17:50:02 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E4=B8=8A=E6=B8=B8?= =?UTF-8?q?=E7=9C=81=E7=95=A5event=E5=AD=97=E6=AE=B5=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E9=9F=B3=E9=A2=91=E5=B8=A7=E8=A2=AB=E4=B8=A2=E5=BC=83=E7=9A=84?= =?UTF-8?q?bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- adapter/volcano/response.go | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/adapter/volcano/response.go b/adapter/volcano/response.go index 84b2932..e5c3bbc 100644 --- a/adapter/volcano/response.go +++ b/adapter/volcano/response.go @@ -105,9 +105,26 @@ func ParseStream(body io.Reader, started time.Time) (*ParsedStream, error) { gotFirstChunk = true } case "": - // 无 event 字段的元数据行(上游 TTSSentenceStart 偶发省略 event), - // debug 模式打印便于排查;正常情况静默跳过。 - if common.DebugLog && resp.Code == 0 { + // 上游 v3 有时会省略 event 字段,音频数据直接出现在无 event 的行里; + // 只要 data 非空就当作音频帧解码收集。 + if resp.Data != "" { + chunk, err := base64.StdEncoding.DecodeString(resp.Data) + if err != nil { + return nil, &UpstreamError{ + Code: resp.Code, + Message: fmt.Sprintf("decode audio chunk: %v", err), + Stage: "stream", + Wrapped: err, + } + } + out.AudioData = append(out.AudioData, chunk...) + out.Chunks++ + if !gotFirstChunk { + out.FirstChunk = time.Since(started) + gotFirstChunk = true + } + } else if common.DebugLog && resp.Code == 0 { + // 元数据行(无 data 无 event),debug 模式打印便于排查 log.Printf("volcano: 无 event 字段 code=%d sequence=%d sentence=%s data_len=%d", resp.Code, resp.Sequence, resp.SentenceText(), len(resp.Data)) } default: