str.swap(result);
}
+ static int fouce_count = 0; //
void AiVoiceModel::ProcessTextByPunctuation()
{
- const std::string punctuation = "ï¼\8cã\80\82ï¼\81ï¼\9fï¼\9bï¼\9aï¼\89)â\80\9dã\80\81"; // 要替换的中文标点
+ const std::string punctuation = "ï¼\8cã\80\82ï¼\81ï¼\9fï¼\9bï¼\9aï¼\89)â\80\9câ\80\9dã\80\81\"\""; // 要替换的中文标点
const char replacement = ','; // 替换为英文逗号
const size_t MAX_SEGMENT_LENGTH = 120; // 最大分段长度
const size_t MIN_SEGMENT_LENGTH = 1; // 最小发送长度(可调整)
{
// 发送后清空累积文本
accumulatedText.clear();
+ fouce_count = 0;
}
else
{
// 发送失败,等待下次发送
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "发送失败,等待下次发送");
+ fouce_count++;
+ if(fouce_count >= 3)
+ {
+ uapi_start_tts();
+ fouce_count = 0;
+ }
}
}
else
void AiVoiceModel::reset_ai_screen60s_timer_time()
{
SCREEN_60S_TIME = 60;
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "reset_ai_screen60s_timer_time %d", SCREEN_60S_TIME);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "reset_ai_screen60s_timer_time %d", SCREEN_60S_TIME);
if (nullptr == g_screen60s_timer)
{
ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 重新常亮屏
LISTENING_TIMEOUT--;
if (LISTENING_TIMEOUT <= 0)
{
- AiVoiceModel::GetInstance().StopListenAndRecordingUserQuestion(); // 停止聆听用户问题
+ // AiVoiceModel::GetInstance().StopListenAndRecordingUserQuestion(); // 停止聆听用户问题
AiVoiceModel::GetInstance().stop_listening_timer(); // 停止聆听定时器
AiVoicePresenter *p_AiVoicePresenter = AiVoicePresenter::GetInstance();
if (AiVoicePresenter::GetInstance() && AivoiceListeningView::GetInstance())
// 添加一个静态变量用于跟踪连续出现0的次数
static int s_tts_tick_zero_count = 0;
static int continue_zero_count = 0; // 静态变量:记录连续为0的次数(初始化为0)
- static int fouce_count = 0; //
static void AI4G_IS_START_TTS_CallbackProc(int data)
{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AI4G_IS_START_TTS_CallbackProc:%s", AiVoiceModel::GetInstance().GetAccumulatedText().c_str());
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AI4G_IS_START_TTS_CallbackProc:%s", AiVoiceModel::GetInstance().GetAccumulatedText().c_str());
AiVoiceModel::GetInstance().GetInit_4gai_task(); // 获取4gai服务状态
if (get_ai_tts_server_init_flag() == 0) // tts服务如果断开了,就停止定时器
{
return;
}
+ if (!get_ai_osal_msg_queue_is_full())
+ {
+ AiVoiceModel::GetInstance().ProcessTextByPunctuation();
+ }
+
+ #if 0
// 当前回调中get_bk_websocket_tts_tick()是否为0
bool current_tick_zero = (get_bk_websocket_tts_tick() == 0);
}
}
}
+ #endif
return;
}
s_tts_tick_zero_count = 0; // 重置计数器
continue_zero_count = 0; // 重置静态变量
fouce_count = 0;
+
+ start_uapi_stop_tts_timer();
}
}
}
}
+
+ static osTimerId_t g_uapi_stop_tts_Handle = nullptr;
+ static void AI4G_UAPI_STOP_TTS_CallbackProc(int data)
+ {
+ uapi_stop_tts();
+ AiVoiceModel::GetInstance().stop_uapi_stop_tts_timer();
+ }
+
+ static void AI4G_UAPI_STOP_TTS_Callback(int data)
+ {
+ GraphicService::GetInstance()->PostGraphicEvent(std::bind(AI4G_UAPI_STOP_TTS_CallbackProc, data));
+ }
+
+ void AiVoiceModel::start_uapi_stop_tts_timer(uint32_t interval)
+ {
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AiVoiceModel::start_uapi_stop_tts_timer");
+ /* -------------------------- 1.检查定时器是否已经存在,如果存在则返回 ------------------------- */
+ if (g_uapi_stop_tts_Handle != nullptr)
+ {
+ // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Timer already exists!!");
+ return;
+ }
+ /* --------------------------------- 2.创建定时器 -------------------------------- */
+ g_uapi_stop_tts_Handle = osTimerNew((osTimerFunc_t)AI4G_UAPI_STOP_TTS_Callback, osTimerPeriodic, nullptr, nullptr);
+ // 检查定时器创建是否成功
+ if (g_uapi_stop_tts_Handle == nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Timer create failed!!");
+ return;
+ }
+ /* ----------------------------- 3.将毫秒转换为系统时钟节拍数 ---------------------------- */
+ int tick = osMs2Tick(interval);
+ /* --------------------------------- 4.启动定时器 -------------------------------- */
+ osStatus_t ret = osTimerStart(g_uapi_stop_tts_Handle, tick);
+ /* -------------------- 5.检查定时器启动是否成功,如果启动失败,删除定时器并置为 nullptr -------------------- */
+ if (ret != osOK)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "osTimerDelete failed, ret = %lx!!", ret);
+ if (g_uapi_stop_tts_Handle != nullptr)
+ {
+ ret = osTimerDelete(g_uapi_stop_tts_Handle);
+ }
+ g_uapi_stop_tts_Handle = nullptr;
+ return;
+ }
+ }
+
+ void AiVoiceModel::stop_uapi_stop_tts_timer(void)
+ {
+ // 检查定时器是否存在
+ if (g_uapi_stop_tts_Handle != nullptr)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "stop_uapi_stop_tts_timer");
+ osTimerStop(g_uapi_stop_tts_Handle);
+ // 删除定时器并置为 nullptr
+ osStatus_t ret = osTimerDelete(g_uapi_stop_tts_Handle);
+ if (ret != osOK)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "osTimerDelete failed, ret = %lx!!", ret);
+ }
+ g_uapi_stop_tts_Handle = nullptr;
+ }
+ }
+
// 设置选择的ai模型
void AiVoiceModel::SetSelectAiModel(int index)
{
uint8_t asr_state = 0;
uint8_t chat_state = 0;
uint8_t tts_state = 0;
- // asr_state = get_ai_asr_service_init_flag();
- asr_state = 1;
+ asr_state = get_ai_asr_service_init_flag();
+ // asr_state = 1;
chat_state = get_ai_chat_service_init_flag();
tts_state = get_ai_tts_server_init_flag();
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "asr_state:%d,chat_state:%d,tts_state:%d", asr_state, chat_state, tts_state);
model->stop_ai4g_connect_timer();
model->stop_ai4g_tts_play_timer();
model->stop_update_ai_answer_timer();
+ model->stop_uapi_stop_tts_timer();
remove_4GAI_vote(); // 移除4g投票
dinit_ai_task();
{
if (view_->GetAiVoiceScrollView(AIVOICE_LISTENING_VIEWID) || view_->GetAiVoiceScrollView(AIVOICE_THINKING_VIEWID))
{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "JumpToReturnResultTextView");
ChangeViewAndLogicOperator(model->GetCurView(), AIVOICE_RETURN_RESULT_TEXT_VIEWID);
}
else
AiVoiceModel::GetInstance().stop_update_ai_answer_timer();
break;
+ case AIVOICE_4GSERVICECON_VIEW:
+ model->stop_ai4g_connect_timer();
+ break;
default:
// Handle other cases if needed
break;
{
UNUSED(event);
std::string viewId = view.GetViewId();
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AiVoicePresenter::OnPress %s", viewId.c_str());
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AiVoicePresenter::OnPress %s", viewId.c_str());
/* ----------------------------- 重置60s取消常亮屏timer ---------------------------- */
model->reset_ai_screen60s_timer_time();
/* -------------------------------------------------------------------------- */
if (send_websocket_message(tts_client,( uint8_t *)jsonString,strlen(jsonString),WS_TEXT)==0)
-{
+ {
memset_s(tts_task_id_buf,128,0,128);
tts_is_ready=0;
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message succ 0\n");
-}
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message succ 0\n");
+ }
}
void uapi_stop_tts(void)
{
+ if (tts_is_ready!=1)
+ {
+ return;
+ }
+
char *jsonString =
" { \
\"header\": { \
printf("uapi_start_tts : %s\r\n",jsonString);
if (send_websocket_message(tts_client,( uint8_t *)jsonString,strlen(jsonString),WS_TEXT)==0)
-{
+ {
tts_is_ready=0;
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message succ 0\n");
-}
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message succ 0\n");
+ }
}
}
-void uapi_start_tts_single_txt(char *buf)
+bool uapi_start_tts_single_txt(char *buf)
{
-
- if(tts_is_ready!=1)
+
+ if(tts_is_ready!=1)
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"uapi_start_tts_single_txt no tts_is_ready \n");
- return;
+ return false;
}
-
+
char *jsonString = (char *)malloc(strlen(buf)+300);// [512] ={0};
,tts_task_id_buf,buf);
- printf("uapi_start_tts_single_txt :%s\r\n",jsonString);
+ printf("uapi_start_tts_single_txt :%s\r\n",jsonString);
if (send_websocket_message(tts_client,( uint8_t *)jsonString,strlen(jsonString),WS_TEXT)==0)
{