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();