#pragma once #include #include #include #include #include #include "../utils/ThreadSafeQueue.h" namespace secondvoice { class AudioCapture; class WhisperClient; class ClaudeClient; class TranslationUI; class AudioBuffer; struct AudioChunk { std::vector data; int sample_rate; int channels; }; class Pipeline { public: Pipeline(); ~Pipeline(); bool initialize(); bool start(); void stop(); // Call this from main thread for UI updates void update(); bool isRunning() const { return running_; } bool shouldClose() const; // Clear accumulated translations void clearAccumulated(); private: void audioThread(); void processingThread(); std::unique_ptr audio_capture_; std::unique_ptr whisper_client_; std::unique_ptr claude_client_; std::unique_ptr ui_; std::unique_ptr full_recording_; ThreadSafeQueue audio_queue_; std::thread audio_thread_; std::thread processing_thread_; std::atomic running_{false}; std::atomic recording_duration_{0}; // Simple accumulation std::string accumulated_chinese_; std::string accumulated_french_; }; } // namespace secondvoice