From bc4b0a0bb11ff02dec3f1e9315c18fbb30e9112a Mon Sep 17 00:00:00 2001 From: Terrence Date: Tue, 5 Nov 2024 16:50:29 +0800 Subject: [PATCH] move audio enable/disable in ws connect/discconect --- main/Application.cc | 16 ++++++++++------ main/Application.h | 16 ++++++++-------- main/AudioDevice.h | 4 +++- main/Board.h | 2 +- main/Ml307Board.cc | 2 ++ main/boards/bread-compact-ml307/config.h | 1 + main/boards/bread-compact-wifi/config.h | 1 + main/boards/esp-box-3/config.h | 1 + main/boards/kevin-box-0/config.h | 1 + main/boards/kevin-box-1/config.h | 1 + main/boards/lichuang-dev/config.h | 1 + 11 files changed, 30 insertions(+), 16 deletions(-) diff --git a/main/Application.cc b/main/Application.cc index 93c26d8d..a8ee1d2d 100644 --- a/main/Application.cc +++ b/main/Application.cc @@ -70,6 +70,7 @@ Application::~Application() { void Application::CheckNewVersion() { // Check if there is a new firmware version available + firmware_upgrade_.SetPostData(Board::GetInstance().GetJson()); firmware_upgrade_.CheckVersion(); if (firmware_upgrade_.HasNewVersion()) { // Wait for the chat state to be idle @@ -106,6 +107,7 @@ void Application::Alert(const std::string&& title, const std::string&& message) void Application::PlayLocalFile(const char* data, size_t size) { ESP_LOGI(TAG, "PlayLocalFile: %zu bytes", size); SetDecodeSampleRate(16000); + audio_device_->EnableOutput(true); { std::lock_guard lock(mutex_); @@ -135,8 +137,9 @@ void Application::Start() { audio_device_ = board.CreateAudioDevice(); audio_device_->Initialize(); - audio_device_->EnableOutput(true); audio_device_->EnableInput(true); + audio_device_->EnableOutput(true); + audio_device_->EnableOutput(false); audio_device_->OnInputData([this](std::vector&& data) { if (16000 != AUDIO_INPUT_SAMPLE_RATE) { if (audio_device_->input_channels() == 2) { @@ -195,7 +198,6 @@ void Application::Start() { }, "play_audio", 4096 * 4, this, 4, NULL); board.StartNetwork(); - firmware_upgrade_.SetPostData(board.GetJson()); // Blink the LED to indicate the device is running builtin_led.SetGreen(); builtin_led.BlinkOnce(); @@ -339,7 +341,7 @@ void Application::Start() { }); #endif - SetChatState(kChatStateIdle); + chat_state_ = kChatStateIdle; display_.UpdateDisplay(); } @@ -403,7 +405,6 @@ void Application::SetChatState(ChatState state) { case kChatStateUnknown: case kChatStateIdle: builtin_led.TurnOff(); - audio_device_->EnableOutput(false); break; case kChatStateConnecting: builtin_led.SetBlue(); @@ -416,7 +417,6 @@ void Application::SetChatState(ChatState state) { case kChatStateSpeaking: builtin_led.SetGreen(); builtin_led.TurnOn(); - audio_device_->EnableOutput(true); break; case kChatStateWakeWordDetected: builtin_led.SetBlue(); @@ -686,6 +686,7 @@ void Application::StartWebSocketClient() { ws_client_->OnDisconnected([this]() { ESP_LOGI(TAG, "Websocket disconnected"); Schedule([this]() { + audio_device_->EnableOutput(false); #ifdef CONFIG_USE_AFE_SR audio_processor_.Stop(); #endif @@ -699,4 +700,7 @@ void Application::StartWebSocketClient() { ESP_LOGE(TAG, "Failed to connect to websocket server"); return; } -} \ No newline at end of file + + // 建立语音通道后打开音频输出,避免待机时喇叭底噪 + audio_device_->EnableOutput(true); +} diff --git a/main/Application.h b/main/Application.h index f429e8a5..9db68f34 100644 --- a/main/Application.h +++ b/main/Application.h @@ -1,18 +1,18 @@ #ifndef _APPLICATION_H_ #define _APPLICATION_H_ +#include +#include +#include +#include +#include +#include +#include + #include #include #include -#include -#include -#include -#include -#include -#include -#include - #include "AudioDevice.h" #include "Display.h" #include "Board.h" diff --git a/main/AudioDevice.h b/main/AudioDevice.h index fef45e33..4a0c66f4 100644 --- a/main/AudioDevice.h +++ b/main/AudioDevice.h @@ -8,6 +8,8 @@ #include #include +#include "Board.h" + class AudioDevice { public: AudioDevice(); @@ -44,7 +46,7 @@ protected: int output_sample_rate_ = 0; int input_channels_ = 1; int output_channels_ = 1; - int output_volume_ = 70; + int output_volume_ = AUDIO_DEFAULT_OUTPUT_VOLUME; i2s_chan_handle_t tx_handle_ = nullptr; i2s_chan_handle_t rx_handle_ = nullptr; diff --git a/main/Board.h b/main/Board.h index 197e94db..eaaec400 100644 --- a/main/Board.h +++ b/main/Board.h @@ -4,10 +4,10 @@ #include "config.h" #include #include -#include #include void* create_board(); +class AudioDevice; class Board { public: diff --git a/main/Ml307Board.cc b/main/Ml307Board.cc index 5d210668..69072990 100644 --- a/main/Ml307Board.cc +++ b/main/Ml307Board.cc @@ -37,8 +37,10 @@ void Ml307Board::StartNetwork() { int result = modem_.WaitForNetworkReady(); if (result == -1) { application.Alert("Error", "PIN is not ready"); + return; } else if (result == -2) { application.Alert("Error", "Registration denied"); + return; } // Print the ML307 modem information diff --git a/main/boards/bread-compact-ml307/config.h b/main/boards/bread-compact-ml307/config.h index 5157c449..383fc0cf 100644 --- a/main/boards/bread-compact-ml307/config.h +++ b/main/boards/bread-compact-ml307/config.h @@ -5,6 +5,7 @@ #define AUDIO_INPUT_SAMPLE_RATE 16000 #define AUDIO_OUTPUT_SAMPLE_RATE 24000 +#define AUDIO_DEFAULT_OUTPUT_VOLUME 70 #define AUDIO_I2S_METHOD_SIMPLEX diff --git a/main/boards/bread-compact-wifi/config.h b/main/boards/bread-compact-wifi/config.h index ff7623c2..e893813f 100644 --- a/main/boards/bread-compact-wifi/config.h +++ b/main/boards/bread-compact-wifi/config.h @@ -5,6 +5,7 @@ #define AUDIO_INPUT_SAMPLE_RATE 16000 #define AUDIO_OUTPUT_SAMPLE_RATE 24000 +#define AUDIO_DEFAULT_OUTPUT_VOLUME 70 #define AUDIO_I2S_METHOD_SIMPLEX diff --git a/main/boards/esp-box-3/config.h b/main/boards/esp-box-3/config.h index 95442ed3..fec73b08 100644 --- a/main/boards/esp-box-3/config.h +++ b/main/boards/esp-box-3/config.h @@ -5,6 +5,7 @@ #define AUDIO_INPUT_SAMPLE_RATE 16000 #define AUDIO_OUTPUT_SAMPLE_RATE 16000 +#define AUDIO_DEFAULT_OUTPUT_VOLUME 70 #define AUDIO_INPUT_REFERENCE true diff --git a/main/boards/kevin-box-0/config.h b/main/boards/kevin-box-0/config.h index fbbc3ecd..15819abe 100644 --- a/main/boards/kevin-box-0/config.h +++ b/main/boards/kevin-box-0/config.h @@ -5,6 +5,7 @@ #define AUDIO_INPUT_SAMPLE_RATE 24000 #define AUDIO_OUTPUT_SAMPLE_RATE 24000 +#define AUDIO_DEFAULT_OUTPUT_VOLUME 70 #define AUDIO_INPUT_REFERENCE true diff --git a/main/boards/kevin-box-1/config.h b/main/boards/kevin-box-1/config.h index 6418f315..58ce7eba 100644 --- a/main/boards/kevin-box-1/config.h +++ b/main/boards/kevin-box-1/config.h @@ -5,6 +5,7 @@ #define AUDIO_INPUT_SAMPLE_RATE 24000 #define AUDIO_OUTPUT_SAMPLE_RATE 24000 +#define AUDIO_DEFAULT_OUTPUT_VOLUME 70 #define AUDIO_INPUT_REFERENCE true diff --git a/main/boards/lichuang-dev/config.h b/main/boards/lichuang-dev/config.h index 01850041..efaca110 100644 --- a/main/boards/lichuang-dev/config.h +++ b/main/boards/lichuang-dev/config.h @@ -5,6 +5,7 @@ #define AUDIO_INPUT_SAMPLE_RATE 24000 #define AUDIO_OUTPUT_SAMPLE_RATE 24000 +#define AUDIO_DEFAULT_OUTPUT_VOLUME 80 #define AUDIO_INPUT_REFERENCE true