#ifndef WAKE_WORD_DETECT_H #define WAKE_WORD_DETECT_H #include #include #include #include #include #include #include #include #include class WakeWordDetect { public: WakeWordDetect(); ~WakeWordDetect(); void Initialize(int channels, bool reference); void Feed(std::vector& data); void OnWakeWordDetected(std::function callback); void OnVadStateChange(std::function callback); void StartDetection(); void StopDetection(); bool IsDetectionRunning(); void EncodeWakeWordData(); const std::string&& GetWakeWordStream(); private: esp_afe_sr_data_t* afe_detection_data_ = nullptr; char* wakenet_model_ = NULL; std::vector input_buffer_; EventGroupHandle_t event_group_; std::function wake_word_detected_callback_; std::function vad_state_change_callback_; bool is_speaking_ = false; int channels_; bool reference_; TaskHandle_t wake_word_encode_task_ = nullptr; StaticTask_t wake_word_encode_task_buffer_; StackType_t* wake_word_encode_task_stack_ = nullptr; std::list> wake_word_pcm_; std::string wake_word_opus_; void StoreWakeWordData(uint16_t* data, size_t size); void AudioDetectionTask(); }; #endif