From 2152dcb296001916f281f0c101723bce086b3f7f Mon Sep 17 00:00:00 2001 From: impressionyang Date: Thu, 11 Jun 2026 16:39:59 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=BB=9F=E8=AE=A1=E6=8C=89=E9=94=AE?= =?UTF-8?q?=E8=A7=A6=E5=8F=91=E5=88=B0=E6=AD=A3=E5=9C=A8=E5=BD=95=E9=9F=B3?= =?UTF-8?q?=E7=9A=84=E5=BB=B6=E8=BF=9F=E5=B9=B6=E5=9C=A8=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E4=B8=AD=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 每次长按进入 Recording 状态时打印本次延迟,并维护累计统计: ⏱ 按键→录音延迟: 123ms (平均: 120ms, 最小: 98ms, 最大: 155ms, 累计: 5次) 使用 QElapsedTimer 精确计时。 Co-Authored-By: Claude Opus 4.7 --- src/core/voice_input_service.cpp | 22 ++++++++++++++++++++++ src/core/voice_input_service.h | 10 ++++++++++ 2 files changed, 32 insertions(+) diff --git a/src/core/voice_input_service.cpp b/src/core/voice_input_service.cpp index 9aa1ba3..06a6004 100644 --- a/src/core/voice_input_service.cpp +++ b/src/core/voice_input_service.cpp @@ -19,6 +19,8 @@ #include #include #include +#include +#include static const char* const kTag = "VoiceInputService"; @@ -48,6 +50,22 @@ VoiceInputService::VoiceInputService(ConfigManager* configManager, state_ = Recording; audioBuffer_.clear(); // 清除预录音期间的静音 emit statusChanged("正在录音..."); + + // 统计按键到录音延迟 + if (latencyTracking_ && hotkeyLatencyTimer_.isValid()) { + qint64 latencyMs = hotkeyLatencyTimer_.elapsed(); + totalKeyCount_++; + totalLatencyMs_ += latencyMs; + maxLatencyMs_ = std::max(maxLatencyMs_, (double)latencyMs); + minLatencyMs_ = std::min(minLatencyMs_, (double)latencyMs); + double avgMs = totalLatencyMs_ / totalKeyCount_; + LOG_INFO(kTag, QString("⏱ 按键→录音延迟: %1ms (平均: %2ms, 最小: %3ms, 最大: %4ms, 累计: %5次)") + .arg(latencyMs).arg(avgMs, 0, 'f', 0) + .arg(minLatencyMs_, 0, 'f', 0).arg(maxLatencyMs_, 0, 'f', 0) + .arg(totalKeyCount_)); + latencyTracking_ = false; + } + LOG_DEBUG(kTag, "PreRecording → Recording (灯保持 ON,开始录音)"); } }); @@ -156,6 +174,10 @@ void VoiceInputService::onHotkeyActivated() { recording_ = true; audioBuffer_.clear(); + // 启动延迟统计 + hotkeyLatencyTimer_.start(); + latencyTracking_ = true; + int deviceIndex = configManager_->get("audio.input_device").toInt(); int sampleRate = configManager_->get("stt.sample_rate").toInt(); int bufferSizeMs = configManager_->get("audio.buffer_size_ms").toInt(); diff --git a/src/core/voice_input_service.h b/src/core/voice_input_service.h index cb0625a..1e946c8 100644 --- a/src/core/voice_input_service.h +++ b/src/core/voice_input_service.h @@ -3,6 +3,7 @@ #include #include #include +#include #include #include @@ -80,6 +81,15 @@ private: QTimer* longPressTimer_ = nullptr; QTimer* cooldownTimer_ = nullptr; + // 按键到录音延迟统计 + QElapsedTimer hotkeyLatencyTimer_; + bool latencyTracking_ = false; + + int totalKeyCount_ = 0; + double totalLatencyMs_ = 0; + double maxLatencyMs_ = 0; + double minLatencyMs_ = 9999; + void startRecording(); void stopRecordingAndTranscribe(); void simulateCapsLock();