From b5f7c823c83d61838bc7a461e8d2237507428c20 Mon Sep 17 00:00:00 2001 From: mapleafgo Date: Wed, 8 Apr 2026 16:59:13 +0800 Subject: [PATCH] =?UTF-8?q?debug(audio):=20=E6=B7=BB=E5=8A=A0=20Resampler?= =?UTF-8?q?=20=E6=95=B0=E6=8D=AE=E8=AF=BB=E5=8F=96=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 为诊断 TTS 音频播放停滞问题,添加手动测试代码验证 Resampler 是否能正常读取音频数据: - 在 speaker.Play() 前尝试从 Resampler 读取 10 个样本 - 打印读取状态和样本数据,验证数据流是否正常 - 重新创建 Resampler 确保测试不影响正常播放 此调试代码用于确认问题是在 Resampler/WAV 解码层,还是在 speaker/mixer 层 Co-Authored-By: Claude Sonnet 4.6 --- pkg/audio/play.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/pkg/audio/play.go b/pkg/audio/play.go index a6e6b49..7d4a89e 100644 --- a/pkg/audio/play.go +++ b/pkg/audio/play.go @@ -39,6 +39,16 @@ func PlayWav(c context.Context, r io.Reader) { s := beep.Resample(4, format.SampleRate, DefaultSampleRate, streamer) ctrl := &beep.Ctrl{Streamer: s} + + // 测试 Streamer 是否可以正常读取数据 + testSamples := make([][2]float64, 10) + n, ok := s.Stream(testSamples) + zap.S().Debugf("测试读取 Resampler: 读取 %d 样本, ok=%v, 数据=%v", n, ok, testSamples[:n]) + + // 重置 streamer + s = beep.Resample(4, format.SampleRate, DefaultSampleRate, streamer) + ctrl.Streamer = s + done := make(chan struct{}) speaker.Play(beep.Seq(ctrl, beep.Callback(func() { zap.S().Debugln("音频播放完成")