From 70481429367ca00144b24f118cbfdfb28b02967d Mon Sep 17 00:00:00 2001
From: wangzhibo <wangzhibo@shsening.com>
Date: 星期三, 26 八月 2026 15:54:31 +0800
Subject: [PATCH] add sening functions
---
xiaozhi-esp32-2.2.6/main/audio/wake_words/custom_wake_word.cc | 29 +++++++++++++++++++++++++++--
1 files changed, 27 insertions(+), 2 deletions(-)
diff --git a/xiaozhi-esp32-2.2.6/main/audio/wake_words/custom_wake_word.cc b/xiaozhi-esp32-2.2.6/main/audio/wake_words/custom_wake_word.cc
index 982bbe9..129b63d 100644
--- a/xiaozhi-esp32-2.2.6/main/audio/wake_words/custom_wake_word.cc
+++ b/xiaozhi-esp32-2.2.6/main/audio/wake_words/custom_wake_word.cc
@@ -2,6 +2,7 @@
#include "audio_service.h"
#include "system_info.h"
#include "assets.h"
+#include "boards/sening-xiaozhi-s3/system.h"
#include <esp_log.h>
#include <esp_mn_iface.h>
@@ -89,13 +90,29 @@
if (models_list == nullptr) {
language_ = "cn";
models_ = esp_srmodel_init("model");
-#ifdef CONFIG_CUSTOM_WAKE_WORD
+#if defined(BOARD_CUSTOM_WAKE_WORD_PINYIN) && defined(BOARD_CUSTOM_WAKE_WORD_DISPLAY) && defined(BOARD_CUSTOM_WAKE_WORD_THRESHOLD_PERCENT)
+ threshold_ = BOARD_CUSTOM_WAKE_WORD_THRESHOLD_PERCENT / 100.0f;
+ commands_.push_back({BOARD_CUSTOM_WAKE_WORD_PINYIN, BOARD_CUSTOM_WAKE_WORD_DISPLAY, "wake"});
+#elif defined(CONFIG_CUSTOM_WAKE_WORD)
threshold_ = CONFIG_CUSTOM_WAKE_WORD_THRESHOLD / 100.0f;
commands_.push_back({CONFIG_CUSTOM_WAKE_WORD, CONFIG_CUSTOM_WAKE_WORD_DISPLAY, "wake"});
#endif
+ commands_.push_back({OFFLINE_COMMAND_WORD_PINYIN, OFFLINE_COMMAND_WORD, "offline_command"});
} else {
models_ = models_list;
ParseWakenetModelConfig();
+#if defined(BOARD_CUSTOM_WAKE_WORD_PINYIN) && defined(BOARD_CUSTOM_WAKE_WORD_DISPLAY) && defined(BOARD_CUSTOM_WAKE_WORD_THRESHOLD_PERCENT)
+ threshold_ = BOARD_CUSTOM_WAKE_WORD_THRESHOLD_PERCENT / 100.0f;
+ for (auto it = commands_.begin(); it != commands_.end();) {
+ if (it->action == "wake") {
+ it = commands_.erase(it);
+ } else {
+ ++it;
+ }
+ }
+ commands_.push_back({BOARD_CUSTOM_WAKE_WORD_PINYIN, BOARD_CUSTOM_WAKE_WORD_DISPLAY, "wake"});
+#endif
+ commands_.push_back({OFFLINE_COMMAND_WORD_PINYIN, OFFLINE_COMMAND_WORD, "offline_command"});
}
if (models_ == nullptr || models_->num == -1) {
@@ -130,6 +147,10 @@
void CustomWakeWord::OnWakeWordDetected(std::function<void(const std::string& wake_word)> callback) {
wake_word_detected_callback_ = callback;
+}
+
+void CustomWakeWord::OnOfflineCommandDetected(std::function<void(const std::string& command)> callback) {
+ offline_command_detected_callback_ = callback;
}
void CustomWakeWord::Start() {
@@ -180,10 +201,14 @@
last_detected_wake_word_ = command.text;
running_ = false;
input_buffer_.clear();
-
+
if (wake_word_detected_callback_) {
wake_word_detected_callback_(last_detected_wake_word_);
}
+ } else if (command.action == "offline_command") {
+ if (offline_command_detected_callback_) {
+ offline_command_detected_callback_(command.text);
+ }
}
}
multinet_->clean(multinet_model_data_);
--
Gitblit v1.9.1