From aac56027220a3321f19a2c41d3bd99675596f0ac Mon Sep 17 00:00:00 2001 From: StillHammer Date: Tue, 2 Dec 2025 09:53:53 +0800 Subject: [PATCH] refactor: Add VAD configuration accessors to Config class --- src/utils/Config.cpp | 44 ++++++++++++++++++++++++++++++++------------ src/utils/Config.h | 6 ++++++ 2 files changed, 38 insertions(+), 12 deletions(-) diff --git a/src/utils/Config.cpp b/src/utils/Config.cpp index 7af8571..cbe73cd 100644 --- a/src/utils/Config.cpp +++ b/src/utils/Config.cpp @@ -52,10 +52,9 @@ bool Config::load(const std::string& config_path, const std::string& env_path) { } std::cerr << "[Config] File opened successfully" << std::endl; - json config_json; try { std::cerr << "[Config] About to parse JSON..." << std::endl; - config_file >> config_json; + config_file >> config_; std::cerr << "[Config] JSON parsed successfully" << std::endl; } catch (const json::parse_error& e) { std::cerr << "Error parsing config.json: " << e.what() << std::endl; @@ -66,8 +65,8 @@ bool Config::load(const std::string& config_path, const std::string& env_path) { } // Parse audio config - if (config_json.contains("audio")) { - auto& audio = config_json["audio"]; + if (config_.contains("audio")) { + auto& audio = config_["audio"]; audio_config_.sample_rate = audio.value("sample_rate", 16000); audio_config_.channels = audio.value("channels", 1); audio_config_.chunk_duration_seconds = audio.value("chunk_duration_seconds", 10); @@ -76,8 +75,8 @@ bool Config::load(const std::string& config_path, const std::string& env_path) { } // Parse whisper config - if (config_json.contains("whisper")) { - auto& whisper = config_json["whisper"]; + if (config_.contains("whisper")) { + auto& whisper = config_["whisper"]; whisper_config_.model = whisper.value("model", "whisper-1"); whisper_config_.language = whisper.value("language", "zh"); whisper_config_.temperature = whisper.value("temperature", 0.0f); @@ -87,8 +86,8 @@ bool Config::load(const std::string& config_path, const std::string& env_path) { } // Parse claude config - if (config_json.contains("claude")) { - auto& claude = config_json["claude"]; + if (config_.contains("claude")) { + auto& claude = config_["claude"]; claude_config_.model = claude.value("model", "claude-haiku-4-20250514"); claude_config_.max_tokens = claude.value("max_tokens", 1024); claude_config_.temperature = claude.value("temperature", 0.3f); @@ -96,8 +95,8 @@ bool Config::load(const std::string& config_path, const std::string& env_path) { } // Parse UI config - if (config_json.contains("ui")) { - auto& ui = config_json["ui"]; + if (config_.contains("ui")) { + auto& ui = config_["ui"]; ui_config_.window_width = ui.value("window_width", 800); ui_config_.window_height = ui.value("window_height", 600); ui_config_.font_size = ui.value("font_size", 16); @@ -105,8 +104,8 @@ bool Config::load(const std::string& config_path, const std::string& env_path) { } // Parse recording config - if (config_json.contains("recording")) { - auto& recording = config_json["recording"]; + if (config_.contains("recording")) { + auto& recording = config_["recording"]; recording_config_.save_audio = recording.value("save_audio", true); recording_config_.output_directory = recording.value("output_directory", "./recordings"); } @@ -114,4 +113,25 @@ bool Config::load(const std::string& config_path, const std::string& env_path) { return true; } +int Config::getVadSilenceDurationMs() const { + if (config_.contains("vad") && config_["vad"].contains("silence_duration_ms")) { + return config_["vad"]["silence_duration_ms"].get(); + } + return 700; // Default from AudioCapture.h:72 (unchanged) +} + +int Config::getVadMinSpeechDurationMs() const { + if (config_.contains("vad") && config_["vad"].contains("min_speech_duration_ms")) { + return config_["vad"]["min_speech_duration_ms"].get(); + } + return 2000; // Default from AudioCapture.h:73 (updated in TASK2) +} + +int Config::getVadMaxSpeechDurationMs() const { + if (config_.contains("vad") && config_["vad"].contains("max_speech_duration_ms")) { + return config_["vad"]["max_speech_duration_ms"].get(); + } + return 30000; // Default from AudioCapture.h:74 (updated in TASK2) +} + } // namespace secondvoice diff --git a/src/utils/Config.h b/src/utils/Config.h index 1387062..42d17fc 100644 --- a/src/utils/Config.h +++ b/src/utils/Config.h @@ -1,6 +1,7 @@ #pragma once #include +#include namespace secondvoice { @@ -55,6 +56,10 @@ public: const std::string& getOpenAIKey() const { return openai_key_; } const std::string& getAnthropicKey() const { return anthropic_key_; } + int getVadSilenceDurationMs() const; + int getVadMinSpeechDurationMs() const; + int getVadMaxSpeechDurationMs() const; + private: Config() = default; Config(const Config&) = delete; @@ -68,6 +73,7 @@ private: std::string openai_key_; std::string anthropic_key_; + nlohmann::json config_; }; } // namespace secondvoice