From 26d9ff283f49c8f47b976925a9d2ca03bbee3c28 Mon Sep 17 00:00:00 2001 From: Xiaoxia Date: Fri, 1 Aug 2025 13:30:17 +0800 Subject: [PATCH] Fix custom wakeword for dual mic (#1018) --- main/audio/audio_service.cc | 5 +++++ main/audio/audio_service.h | 2 -- main/audio/wake_words/custom_wake_word.cc | 15 +++++++++++++-- sdkconfig.defaults | 3 +++ 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/main/audio/audio_service.cc b/main/audio/audio_service.cc index e564ec92..aae61749 100644 --- a/main/audio/audio_service.cc +++ b/main/audio/audio_service.cc @@ -524,6 +524,11 @@ void AudioService::EnableAudioTesting(bool enable) { void AudioService::EnableDeviceAec(bool enable) { ESP_LOGI(TAG, "%s device AEC", enable ? "Enabling" : "Disabling"); + if (!audio_processor_initialized_) { + audio_processor_->Initialize(codec_, OPUS_FRAME_DURATION_MS); + audio_processor_initialized_ = true; + } + audio_processor_->EnableDeviceAec(enable); } diff --git a/main/audio/audio_service.h b/main/audio/audio_service.h index 10d1c670..62859626 100644 --- a/main/audio/audio_service.h +++ b/main/audio/audio_service.h @@ -133,10 +133,8 @@ private: std::deque> audio_testing_queue_; std::deque> audio_encode_queue_; std::deque> audio_playback_queue_; - // For server AEC std::deque timestamp_queue_; - std::mutex timestamp_mutex_; bool wake_word_initialized_ = false; bool audio_processor_initialized_ = false; diff --git a/main/audio/wake_words/custom_wake_word.cc b/main/audio/wake_words/custom_wake_word.cc index bf654330..1aba24a9 100644 --- a/main/audio/wake_words/custom_wake_word.cc +++ b/main/audio/wake_words/custom_wake_word.cc @@ -80,9 +80,20 @@ void CustomWakeWord::Feed(const std::vector& data) { return; } - StoreWakeWordData(data); + esp_mn_state_t mn_state; + // If input channels is 2, we need to fetch the left channel data + if (codec_->input_channels() == 2) { + auto mono_data = std::vector(data.size() / 2); + for (size_t i = 0, j = 0; i < mono_data.size(); ++i, j += 2) { + mono_data[i] = data[j]; + } - esp_mn_state_t mn_state = multinet_->detect(multinet_model_data_, const_cast(data.data())); + StoreWakeWordData(mono_data); + mn_state = multinet_->detect(multinet_model_data_, const_cast(mono_data.data())); + } else { + StoreWakeWordData(data); + mn_state = multinet_->detect(multinet_model_data_, const_cast(data.data())); + } if (mn_state == ESP_MN_STATE_DETECTING) { return; diff --git a/sdkconfig.defaults b/sdkconfig.defaults index 692b7af9..3a53b55c 100644 --- a/sdkconfig.defaults +++ b/sdkconfig.defaults @@ -36,6 +36,9 @@ CONFIG_CODEC_I2C_BACKWARD_COMPATIBLE=n # Fix ML307 FIFO Overflow CONFIG_UART_ISR_IN_IRAM=y +# Fix ESP_SSL error +CONFIG_MBEDTLS_SSL_RENEGOTIATION=n + # LVGL 9.2.2 CONFIG_LV_OS_NONE=y