Jeśli satelita głosowy na ESP32 jednocześnie gra muzykę, wykrywanie słowa wybudzającego musi dzielić procesor z dekodowaniem i odtwarzaniem dźwięku. Gdy zadanie rozpoznawania na chwilę nie nadąża, mały bufor z dźwiękiem z mikrofonu się zapełnia, a ESPHome wyrzuca jego zawartość. W ESPHome 2026.11 ten bufor da się powiększyć. Zgłoszenie zmian otworzył 16 października użytkownik mbrudka, a J. Nick Koston (bdraco) scalił je razem z dokumentacją 18 października o 4:43 czasu polskiego.

Nowa opcja w konfiguracji

Komponent micro_wake_word dostaje opcję ring_buffer_duration, czyli długość bufora cyklicznego. Przyjmuje wartości od 120ms do 1s. Jeśli jej nie podasz, bufor zostaje przy dotychczasowych 120 ms, więc istniejące konfiguracje działają tak samo jak wcześniej.

micro_wake_word:
  microphone: my_microphone
  ring_buffer_duration: 800ms
  models:
    - model: okay_nabu

Modele słów wybudzających wymagają dźwięku 16 kHz, mono, 16 bitów, co daje 32 bajty na milisekundę. Domyślny bufor 120 ms zajmuje 3840 bajtów, a bufor 800 ms 25 600 bajtów, do tego dochodzi niewielki narzut na przydział pamięci. Przy maksymalnej długości, czyli jednej sekundzie, bufor zajmie 32 000 bajtów.

Kiedy to pomaga

Kiedy w buforze zabraknie miejsca, ESPHome go czyści i zapisuje w dzienniku ostrzeżenie: „Not enough free bytes in ring buffer to store incoming audio data. Resetting the ring buffer. Wake word detection accuracy will temporarily be reduced.” Oznacza to, że dźwięk, który był w tym momencie w buforze, nie trafia do modelu, więc model może przeoczyć słowo wybudzające wypowiedziane akurat wtedy.

Autor sprawdził to na głośniku Raspiaudio Muse Luxe, który w tym czasie odtwarzał pliki MP3. Przy buforze 400 ms przepełnienie wystąpiło w jednym z dwóch uruchomień. Przy 800 ms nie wystąpiło w żadnym z ośmiu uruchomień z tym samym źródłem dźwięku. W zgłoszeniu zaznaczono, że testy przeprowadzono bez narzędzi pomiarowych, więc to raczej obserwacja z praktyki niż pomiar.

Czego nie naprawi

Dokumentacja i opis zgłoszenia jasno mówią o ograniczeniach. Dłuższy bufor nie przyspiesza rozpoznawania i nie opóźnia startu. Wyrównuje tylko krótkie przestoje, a według autora nie pomoże, jeśli inne zadania długo i stale zajmują procesor. Wtedy wykrywanie i tak nie nadąży.

Najprościej podejść do tego tak: jeśli w dzienniku urządzenia widzisz to ostrzeżenie podczas odtwarzania, zwiększaj ring_buffer_duration stopniowo, na przykład do 400 ms, a potem do 800 ms, i sprawdzaj, czy komunikat znika. Jeśli ostrzeżenie się nie pojawia, opcji nie trzeba ustawiać.