ESPHome 2026.1.0-dev
Loading...
Searching...
No Matches
micro_wake_word.h
Go to the documentation of this file.
1#pragma once
2
3#ifdef USE_ESP32
4
6#include "streaming_model.h"
7
9
14
15#ifdef USE_OTA_STATE_LISTENER
17#endif
18
19#include <freertos/event_groups.h>
20
21#include <frontend.h>
22#include <frontend_util.h>
23
24namespace esphome {
25namespace micro_wake_word {
26
33
35#ifdef USE_OTA_STATE_LISTENER
36 ,
38#endif
39{
40 public:
41 void setup() override;
42 void loop() override;
43 float get_setup_priority() const override;
44 void dump_config() override;
45
46#ifdef USE_OTA_STATE_LISTENER
47 void on_ota_global_state(ota::OTAState state, float progress, uint8_t error, ota::OTAComponent *comp) override;
48#endif
49
50 void start();
51 void stop();
52
53 bool is_running() const { return this->state_ != State::STOPPED; }
54
55 void set_features_step_size(uint8_t step_size) { this->features_step_size_ = step_size; }
56
58 this->microphone_source_ = microphone_source;
59 }
60
61 void set_stop_after_detection(bool stop_after_detection) { this->stop_after_detection_ = stop_after_detection; }
62
64
66
67#ifdef USE_MICRO_WAKE_WORD_VAD
68 void add_vad_model(const uint8_t *model_start, uint8_t probability_cutoff, size_t sliding_window_size,
69 size_t tensor_arena_size);
70
71 // Intended for the voice assistant component to fetch VAD status
72 bool get_vad_state() { return this->vad_state_; }
73#endif
74
75 // Intended for the voice assistant component to access which wake words are available
76 // Since these are pointers to the WakeWordModel objects, the voice assistant component can enable or disable them
77 std::vector<WakeWordModel *> get_wake_words();
78
79 protected:
83
84 std::weak_ptr<RingBuffer> ring_buffer_;
85 std::vector<WakeWordModel *> wake_word_models_;
86
87#ifdef USE_MICRO_WAKE_WORD_VAD
88 std::unique_ptr<VADModel> vad_model_;
89 bool vad_state_{false};
90#endif
91
92 bool pending_start_{false};
93 bool pending_stop_{false};
94
96
98
99 // Audio frontend handles generating spectrogram features
100 struct FrontendConfig frontend_config_;
101 struct FrontendState frontend_state_;
102
103 // Handles managing the stop/state of the inference task
104 EventGroupHandle_t event_group_;
105
106 // Used to send messages about the models' states to the main loop
107 QueueHandle_t detection_queue_;
108
109 static void inference_task(void *params);
110 TaskHandle_t inference_task_handle_{nullptr};
111
113 void suspend_task_();
115 void resume_task_();
116
117 void set_state_(State state);
118
124 size_t generate_features_(int16_t *audio_buffer, size_t samples_available,
125 int8_t features_buffer[PREPROCESSOR_FEATURE_SIZE]);
126
130
132 void unload_models_();
133
137 bool update_model_probabilities_(const int8_t audio_features[PREPROCESSOR_FEATURE_SIZE]);
138};
139
140} // namespace micro_wake_word
141} // namespace esphome
142
143#endif // USE_ESP32
void resume_task_()
Resumes the inference task.
microphone::MicrophoneSource * microphone_source_
void process_probabilities_()
Processes any new probabilities for each model.
Trigger< std::string > * get_wake_word_detected_trigger() const
void set_stop_after_detection(bool stop_after_detection)
std::weak_ptr< RingBuffer > ring_buffer_
Trigger< std::string > * wake_word_detected_trigger_
std::vector< WakeWordModel * > wake_word_models_
void suspend_task_()
Suspends the inference task.
void add_wake_word_model(WakeWordModel *model)
bool update_model_probabilities_(const int8_t audio_features[PREPROCESSOR_FEATURE_SIZE])
Runs an inference with each model using the new spectrogram features.
size_t generate_features_(int16_t *audio_buffer, size_t samples_available, int8_t features_buffer[PREPROCESSOR_FEATURE_SIZE])
Generates spectrogram features from an input buffer of audio samples.
std::unique_ptr< VADModel > vad_model_
void add_vad_model(const uint8_t *model_start, uint8_t probability_cutoff, size_t sliding_window_size, size_t tensor_arena_size)
void set_features_step_size(uint8_t step_size)
void set_microphone_source(microphone::MicrophoneSource *microphone_source)
void unload_models_()
Deletes each model's TFLite interpreters and frees tensor arena memory.
std::vector< WakeWordModel * > get_wake_words()
void on_ota_global_state(ota::OTAState state, float progress, uint8_t error, ota::OTAComponent *comp) override
Listener interface for global OTA state changes (includes OTA component pointer).
bool state
Definition fan.h:0
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7