From 79085b862b37089c373003f0d3c9b959f57baa85 Mon Sep 17 00:00:00 2001 From: impressionyang Date: Thu, 11 Jun 2026 14:08:16 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20chunkCompleted=20?= =?UTF-8?q?=E4=BF=A1=E5=8F=B7=E6=96=87=E4=BB=B6=E8=B7=AF=E5=BE=84=E4=B8=BA?= =?UTF-8?q?=E7=A9=BA=E7=9A=84=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit closeCurrentFile() 会清空 currentFilePath_,之前代码在 closeCurrentFile() 之后才读取 currentFilePath_ 赋值给 completedPath,导致 emit 的路径为空。 修复:在 closeCurrentFile() 之前先保存文件路径和时长。 Co-Authored-By: Claude Opus 4.7 --- src/audio/streaming_audio_writer.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/audio/streaming_audio_writer.cpp b/src/audio/streaming_audio_writer.cpp index 01647a8..c13a789 100644 --- a/src/audio/streaming_audio_writer.cpp +++ b/src/audio/streaming_audio_writer.cpp @@ -115,13 +115,15 @@ void StreamingAudioWriter::writeSamples(const std::vector& samples) { .arg(silenceFramesAfterSpeech_) .arg(vad_->currentEnergy(), 0, 'f', 4)); - // 完成当前文件 + // 保存文件信息(必须在 closeCurrentFile 之前) + QString completedPath = currentFilePath_; + int durationMs = static_cast(samplesWritten_ * 1000 / sampleRate_); + + // 完成并关闭当前文件 finalizeWavFile(); closeCurrentFile(); // 发射完成信号 - int durationMs = static_cast(samplesWritten_ * 1000 / sampleRate_); - QString completedPath = currentFilePath_; emit chunkCompleted(completedPath, durationMs); // 打开新文件