forked from xiaozhi/xiaozhi-esp32
v1.7.1: fix send audio (#771)
* screen -> display * Add AUDIO_CODEC_DEFAULT_MIC_GAIN * WebRTC -> NSNet * fix: send audio priority
This commit is contained in:
@@ -4,7 +4,7 @@
|
|||||||
# CMakeLists in this exact order for cmake to work correctly
|
# CMakeLists in this exact order for cmake to work correctly
|
||||||
cmake_minimum_required(VERSION 3.16)
|
cmake_minimum_required(VERSION 3.16)
|
||||||
|
|
||||||
set(PROJECT_VER "1.7.0")
|
set(PROJECT_VER "1.7.1")
|
||||||
|
|
||||||
# Add this line to disable the specific warning
|
# Add this line to disable the specific warning
|
||||||
add_compile_options(-Wno-missing-field-initializers)
|
add_compile_options(-Wno-missing-field-initializers)
|
||||||
|
|||||||
@@ -719,6 +719,9 @@ void Application::Schedule(std::function<void()> callback) {
|
|||||||
// If other tasks need to access the websocket or chat state,
|
// If other tasks need to access the websocket or chat state,
|
||||||
// they should use Schedule to call this function
|
// they should use Schedule to call this function
|
||||||
void Application::MainEventLoop() {
|
void Application::MainEventLoop() {
|
||||||
|
// Raise the priority of the main event loop to avoid being interrupted by background tasks (which has priority 2)
|
||||||
|
vTaskPrioritySet(NULL, 3);
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
auto bits = xEventGroupWaitBits(event_group_, SCHEDULE_EVENT | SEND_AUDIO_EVENT, pdTRUE, pdFALSE, portMAX_DELAY);
|
auto bits = xEventGroupWaitBits(event_group_, SCHEDULE_EVENT | SEND_AUDIO_EVENT, pdTRUE, pdFALSE, portMAX_DELAY);
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
#define AUDIO_CODEC_DMA_DESC_NUM 6
|
#define AUDIO_CODEC_DMA_DESC_NUM 6
|
||||||
#define AUDIO_CODEC_DMA_FRAME_NUM 240
|
#define AUDIO_CODEC_DMA_FRAME_NUM 240
|
||||||
|
#define AUDIO_CODEC_DEFAULT_MIC_GAIN 36.0
|
||||||
|
|
||||||
class AudioCodec {
|
class AudioCodec {
|
||||||
public:
|
public:
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
#include <driver/i2c_master.h>
|
#include <driver/i2c_master.h>
|
||||||
#include <driver/i2s_tdm.h>
|
#include <driver/i2s_tdm.h>
|
||||||
|
|
||||||
static const char TAG[] = "BoxAudioCodec";
|
#define TAG "BoxAudioCodec"
|
||||||
|
|
||||||
BoxAudioCodec::BoxAudioCodec(void* i2c_master_handle, int input_sample_rate, int output_sample_rate,
|
BoxAudioCodec::BoxAudioCodec(void* i2c_master_handle, int input_sample_rate, int output_sample_rate,
|
||||||
gpio_num_t mclk, gpio_num_t bclk, gpio_num_t ws, gpio_num_t dout, gpio_num_t din,
|
gpio_num_t mclk, gpio_num_t bclk, gpio_num_t ws, gpio_num_t dout, gpio_num_t din,
|
||||||
@@ -199,7 +199,7 @@ void BoxAudioCodec::EnableInput(bool enable) {
|
|||||||
fs.channel_mask |= ESP_CODEC_DEV_MAKE_CHANNEL_MASK(1);
|
fs.channel_mask |= ESP_CODEC_DEV_MAKE_CHANNEL_MASK(1);
|
||||||
}
|
}
|
||||||
ESP_ERROR_CHECK(esp_codec_dev_open(input_dev_, &fs));
|
ESP_ERROR_CHECK(esp_codec_dev_open(input_dev_, &fs));
|
||||||
ESP_ERROR_CHECK(esp_codec_dev_set_in_channel_gain(input_dev_, ESP_CODEC_DEV_MAKE_CHANNEL_MASK(0), 40.0));
|
ESP_ERROR_CHECK(esp_codec_dev_set_in_channel_gain(input_dev_, ESP_CODEC_DEV_MAKE_CHANNEL_MASK(0), 36.0));
|
||||||
} else {
|
} else {
|
||||||
ESP_ERROR_CHECK(esp_codec_dev_close(input_dev_));
|
ESP_ERROR_CHECK(esp_codec_dev_close(input_dev_));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#include <esp_log.h>
|
#include <esp_log.h>
|
||||||
|
|
||||||
static const char TAG[] = "Es8311AudioCodec";
|
#define TAG "Es8311AudioCodec"
|
||||||
|
|
||||||
Es8311AudioCodec::Es8311AudioCodec(void* i2c_master_handle, i2c_port_t i2c_port, int input_sample_rate, int output_sample_rate,
|
Es8311AudioCodec::Es8311AudioCodec(void* i2c_master_handle, i2c_port_t i2c_port, int input_sample_rate, int output_sample_rate,
|
||||||
gpio_num_t mclk, gpio_num_t bclk, gpio_num_t ws, gpio_num_t dout, gpio_num_t din,
|
gpio_num_t mclk, gpio_num_t bclk, gpio_num_t ws, gpio_num_t dout, gpio_num_t din,
|
||||||
@@ -148,7 +148,7 @@ void Es8311AudioCodec::EnableInput(bool enable) {
|
|||||||
.mclk_multiple = 0,
|
.mclk_multiple = 0,
|
||||||
};
|
};
|
||||||
ESP_ERROR_CHECK(esp_codec_dev_open(input_dev_, &fs));
|
ESP_ERROR_CHECK(esp_codec_dev_open(input_dev_, &fs));
|
||||||
ESP_ERROR_CHECK(esp_codec_dev_set_in_gain(input_dev_, 40.0));
|
ESP_ERROR_CHECK(esp_codec_dev_set_in_gain(input_dev_, AUDIO_CODEC_DEFAULT_MIC_GAIN));
|
||||||
} else {
|
} else {
|
||||||
ESP_ERROR_CHECK(esp_codec_dev_close(input_dev_));
|
ESP_ERROR_CHECK(esp_codec_dev_close(input_dev_));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#include <esp_log.h>
|
#include <esp_log.h>
|
||||||
|
|
||||||
static const char TAG[] = "Es8374AudioCodec";
|
#define TAG "Es8374AudioCodec"
|
||||||
|
|
||||||
Es8374AudioCodec::Es8374AudioCodec(void* i2c_master_handle, i2c_port_t i2c_port, int input_sample_rate, int output_sample_rate,
|
Es8374AudioCodec::Es8374AudioCodec(void* i2c_master_handle, i2c_port_t i2c_port, int input_sample_rate, int output_sample_rate,
|
||||||
gpio_num_t mclk, gpio_num_t bclk, gpio_num_t ws, gpio_num_t dout, gpio_num_t din,
|
gpio_num_t mclk, gpio_num_t bclk, gpio_num_t ws, gpio_num_t dout, gpio_num_t din,
|
||||||
@@ -145,7 +145,7 @@ void Es8374AudioCodec::EnableInput(bool enable) {
|
|||||||
.mclk_multiple = 0,
|
.mclk_multiple = 0,
|
||||||
};
|
};
|
||||||
ESP_ERROR_CHECK(esp_codec_dev_open(input_dev_, &fs));
|
ESP_ERROR_CHECK(esp_codec_dev_open(input_dev_, &fs));
|
||||||
ESP_ERROR_CHECK(esp_codec_dev_set_in_gain(input_dev_, 40.0));
|
ESP_ERROR_CHECK(esp_codec_dev_set_in_gain(input_dev_, AUDIO_CODEC_DEFAULT_MIC_GAIN));
|
||||||
} else {
|
} else {
|
||||||
ESP_ERROR_CHECK(esp_codec_dev_close(input_dev_));
|
ESP_ERROR_CHECK(esp_codec_dev_close(input_dev_));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#include <esp_log.h>
|
#include <esp_log.h>
|
||||||
|
|
||||||
static const char TAG[] = "Es8388AudioCodec";
|
#define TAG "Es8388AudioCodec"
|
||||||
|
|
||||||
Es8388AudioCodec::Es8388AudioCodec(void* i2c_master_handle, i2c_port_t i2c_port, int input_sample_rate, int output_sample_rate,
|
Es8388AudioCodec::Es8388AudioCodec(void* i2c_master_handle, i2c_port_t i2c_port, int input_sample_rate, int output_sample_rate,
|
||||||
gpio_num_t mclk, gpio_num_t bclk, gpio_num_t ws, gpio_num_t dout, gpio_num_t din,
|
gpio_num_t mclk, gpio_num_t bclk, gpio_num_t ws, gpio_num_t dout, gpio_num_t din,
|
||||||
|
|||||||
@@ -25,8 +25,8 @@ void AfeAudioProcessor::Initialize(AudioCodec* codec) {
|
|||||||
srmodel_list_t *models = esp_srmodel_init("model");
|
srmodel_list_t *models = esp_srmodel_init("model");
|
||||||
char* ns_model_name = esp_srmodel_filter(models, ESP_NSNET_PREFIX, NULL);
|
char* ns_model_name = esp_srmodel_filter(models, ESP_NSNET_PREFIX, NULL);
|
||||||
|
|
||||||
afe_config_t* afe_config = afe_config_init(input_format.c_str(), NULL, AFE_TYPE_VC, AFE_MODE_HIGH_PERF);
|
afe_config_t* afe_config = afe_config_init(input_format.c_str(), NULL, AFE_TYPE_VC, AFE_MODE_LOW_COST);
|
||||||
afe_config->aec_mode = AEC_MODE_VOIP_HIGH_PERF;
|
afe_config->aec_mode = AEC_MODE_VOIP_LOW_COST;
|
||||||
afe_config->vad_mode = VAD_MODE_0;
|
afe_config->vad_mode = VAD_MODE_0;
|
||||||
afe_config->vad_min_noise_ms = 100;
|
afe_config->vad_min_noise_ms = 100;
|
||||||
afe_config->ns_init = true;
|
afe_config->ns_init = true;
|
||||||
|
|||||||
@@ -48,12 +48,10 @@ void EspWakeWord::OnWakeWordDetected(std::function<void(const std::string& wake_
|
|||||||
}
|
}
|
||||||
|
|
||||||
void EspWakeWord::StartDetection() {
|
void EspWakeWord::StartDetection() {
|
||||||
ESP_LOGI(TAG, "Start wake word detection");
|
|
||||||
xEventGroupSetBits(event_group_, DETECTION_RUNNING_EVENT);
|
xEventGroupSetBits(event_group_, DETECTION_RUNNING_EVENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EspWakeWord::StopDetection() {
|
void EspWakeWord::StopDetection() {
|
||||||
ESP_LOGI(TAG, "Stop wake word detection");
|
|
||||||
xEventGroupClearBits(event_group_, DETECTION_RUNNING_EVENT);
|
xEventGroupClearBits(event_group_, DETECTION_RUNNING_EVENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
#include <driver/i2s_tdm.h>
|
#include <driver/i2s_tdm.h>
|
||||||
|
|
||||||
|
|
||||||
static const char TAG[] = "CoreS3AudioCodec";
|
#define TAG "CoreS3AudioCodec"
|
||||||
|
|
||||||
CoreS3AudioCodec::CoreS3AudioCodec(void* i2c_master_handle, int input_sample_rate, int output_sample_rate,
|
CoreS3AudioCodec::CoreS3AudioCodec(void* i2c_master_handle, int input_sample_rate, int output_sample_rate,
|
||||||
gpio_num_t mclk, gpio_num_t bclk, gpio_num_t ws, gpio_num_t dout, gpio_num_t din,
|
gpio_num_t mclk, gpio_num_t bclk, gpio_num_t ws, gpio_num_t dout, gpio_num_t din,
|
||||||
@@ -201,7 +201,7 @@ void CoreS3AudioCodec::EnableInput(bool enable) {
|
|||||||
fs.channel_mask |= ESP_CODEC_DEV_MAKE_CHANNEL_MASK(1);
|
fs.channel_mask |= ESP_CODEC_DEV_MAKE_CHANNEL_MASK(1);
|
||||||
}
|
}
|
||||||
ESP_ERROR_CHECK(esp_codec_dev_open(input_dev_, &fs));
|
ESP_ERROR_CHECK(esp_codec_dev_open(input_dev_, &fs));
|
||||||
ESP_ERROR_CHECK(esp_codec_dev_set_in_channel_gain(input_dev_, ESP_CODEC_DEV_MAKE_CHANNEL_MASK(0), 40.0));
|
ESP_ERROR_CHECK(esp_codec_dev_set_in_channel_gain(input_dev_, ESP_CODEC_DEV_MAKE_CHANNEL_MASK(0), AUDIO_CODEC_DEFAULT_MIC_GAIN));
|
||||||
} else {
|
} else {
|
||||||
ESP_ERROR_CHECK(esp_codec_dev_close(input_dev_));
|
ESP_ERROR_CHECK(esp_codec_dev_close(input_dev_));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
#include <driver/i2s_tdm.h>
|
#include <driver/i2s_tdm.h>
|
||||||
|
|
||||||
|
|
||||||
static const char TAG[] = "Tab5AudioCodec";
|
#define TAG "Tab5AudioCodec"
|
||||||
|
|
||||||
|
|
||||||
Tab5AudioCodec::Tab5AudioCodec(void* i2c_master_handle, int input_sample_rate, int output_sample_rate,
|
Tab5AudioCodec::Tab5AudioCodec(void* i2c_master_handle, int input_sample_rate, int output_sample_rate,
|
||||||
@@ -201,7 +201,7 @@ void Tab5AudioCodec::EnableInput(bool enable) {
|
|||||||
fs.channel_mask |= ESP_CODEC_DEV_MAKE_CHANNEL_MASK(1);
|
fs.channel_mask |= ESP_CODEC_DEV_MAKE_CHANNEL_MASK(1);
|
||||||
}
|
}
|
||||||
ESP_ERROR_CHECK(esp_codec_dev_open(input_dev_, &fs));
|
ESP_ERROR_CHECK(esp_codec_dev_open(input_dev_, &fs));
|
||||||
ESP_ERROR_CHECK(esp_codec_dev_set_in_channel_gain(input_dev_, ESP_CODEC_DEV_MAKE_CHANNEL_MASK(0), 40.0));
|
ESP_ERROR_CHECK(esp_codec_dev_set_in_channel_gain(input_dev_, ESP_CODEC_DEV_MAKE_CHANNEL_MASK(0), AUDIO_CODEC_DEFAULT_MIC_GAIN));
|
||||||
} else {
|
} else {
|
||||||
ESP_ERROR_CHECK(esp_codec_dev_close(input_dev_));
|
ESP_ERROR_CHECK(esp_codec_dev_close(input_dev_));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ SpiLcdDisplay::SpiLcdDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_h
|
|||||||
port_cfg.timer_period_ms = 50;
|
port_cfg.timer_period_ms = 50;
|
||||||
lvgl_port_init(&port_cfg);
|
lvgl_port_init(&port_cfg);
|
||||||
|
|
||||||
ESP_LOGI(TAG, "Adding LCD screen");
|
ESP_LOGI(TAG, "Adding LCD display");
|
||||||
const lvgl_port_display_cfg_t display_cfg = {
|
const lvgl_port_display_cfg_t display_cfg = {
|
||||||
.io_handle = panel_io_,
|
.io_handle = panel_io_,
|
||||||
.panel_handle = panel_,
|
.panel_handle = panel_,
|
||||||
@@ -169,7 +169,7 @@ RgbLcdDisplay::RgbLcdDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_h
|
|||||||
port_cfg.timer_period_ms = 50;
|
port_cfg.timer_period_ms = 50;
|
||||||
lvgl_port_init(&port_cfg);
|
lvgl_port_init(&port_cfg);
|
||||||
|
|
||||||
ESP_LOGI(TAG, "Adding LCD screen");
|
ESP_LOGI(TAG, "Adding LCD display");
|
||||||
const lvgl_port_display_cfg_t display_cfg = {
|
const lvgl_port_display_cfg_t display_cfg = {
|
||||||
.io_handle = panel_io_,
|
.io_handle = panel_io_,
|
||||||
.panel_handle = panel_,
|
.panel_handle = panel_,
|
||||||
@@ -227,7 +227,7 @@ MipiLcdDisplay::MipiLcdDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel
|
|||||||
lvgl_port_cfg_t port_cfg = ESP_LVGL_PORT_INIT_CONFIG();
|
lvgl_port_cfg_t port_cfg = ESP_LVGL_PORT_INIT_CONFIG();
|
||||||
lvgl_port_init(&port_cfg);
|
lvgl_port_init(&port_cfg);
|
||||||
|
|
||||||
ESP_LOGI(TAG, "Adding LCD screen");
|
ESP_LOGI(TAG, "Adding LCD display");
|
||||||
const lvgl_port_display_cfg_t disp_cfg = {
|
const lvgl_port_display_cfg_t disp_cfg = {
|
||||||
.io_handle = panel_io,
|
.io_handle = panel_io,
|
||||||
.panel_handle = panel,
|
.panel_handle = panel,
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ OledDisplay::OledDisplay(esp_lcd_panel_io_handle_t panel_io, esp_lcd_panel_handl
|
|||||||
port_cfg.timer_period_ms = 50;
|
port_cfg.timer_period_ms = 50;
|
||||||
lvgl_port_init(&port_cfg);
|
lvgl_port_init(&port_cfg);
|
||||||
|
|
||||||
ESP_LOGI(TAG, "Adding LCD screen");
|
ESP_LOGI(TAG, "Adding OLED display");
|
||||||
const lvgl_port_display_cfg_t display_cfg = {
|
const lvgl_port_display_cfg_t display_cfg = {
|
||||||
.io_handle = panel_io_,
|
.io_handle = panel_io_,
|
||||||
.panel_handle = panel_,
|
.panel_handle = panel_,
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ dependencies:
|
|||||||
rules:
|
rules:
|
||||||
- if: target in [esp32p4]
|
- if: target in [esp32p4]
|
||||||
lijunru-hub/servo_dog_ctrl:
|
lijunru-hub/servo_dog_ctrl:
|
||||||
version: '^0.1.5'
|
version: '^0.1.6'
|
||||||
rules:
|
rules:
|
||||||
- if: target in [esp32c3]
|
- if: target in [esp32c3]
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ CONFIG_MBEDTLS_EXTERNAL_MEM_ALLOC=y
|
|||||||
|
|
||||||
CONFIG_SLAVE_IDF_TARGET_ESP32C6=y
|
CONFIG_SLAVE_IDF_TARGET_ESP32C6=y
|
||||||
|
|
||||||
|
CONFIG_SR_NSN_NSNET2=y
|
||||||
CONFIG_SR_WN_WN9_NIHAOXIAOZHI_TTS=y
|
CONFIG_SR_WN_WN9_NIHAOXIAOZHI_TTS=y
|
||||||
|
|
||||||
CONFIG_IDF_EXPERIMENTAL_FEATURES=y
|
CONFIG_IDF_EXPERIMENTAL_FEATURES=y
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ CONFIG_ESP32S3_INSTRUCTION_CACHE_32KB=y
|
|||||||
CONFIG_ESP32S3_DATA_CACHE_64KB=y
|
CONFIG_ESP32S3_DATA_CACHE_64KB=y
|
||||||
CONFIG_ESP32S3_DATA_CACHE_LINE_64B=y
|
CONFIG_ESP32S3_DATA_CACHE_LINE_64B=y
|
||||||
|
|
||||||
|
CONFIG_SR_NSN_NSNET2=y
|
||||||
CONFIG_SR_WN_WN9_NIHAOXIAOZHI_TTS=y
|
CONFIG_SR_WN_WN9_NIHAOXIAOZHI_TTS=y
|
||||||
|
|
||||||
CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=4096
|
CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=4096
|
||||||
|
|||||||
Reference in New Issue
Block a user