* @Author: luozheng 1732036298@qq.com
* @Date: 2024-06-20 15:14:43
* @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2025-03-12 11:10:53
+ * @LastEditTime: 2025-03-13 16:02:18
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/aivoice/include/AiVoiceModel.h
*/
#ifndef AI_VOICE_MODEL_H
uint8_t GetChatContentListCount(void);
// 更新和清空问题及回答
- void RemoveLastTwoItemsOrClear();
+ bool RemoveLastTwoItemsOrClear();
bool UpdateUserQuestionStr(void);
bool UpdateAiAnswerStr(void);
void ClearQuestionAndAiAnswerStr(void);
std::string GetAiAnswerStr(void);
void SetAiAnswerStrStr(std::string str);
void SetAiAnswerStrStr(std::string str,uint8_t type);
+ uint8_t GetCurUsingAiModelType(void);
// 文件检查和AI状态管理
void CheckFileAndSendAIIsReady();
* @Author: luozheng 1732036298@qq.com
* @Date: 2024-06-20 15:14:50
* @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2025-03-12 11:24:13
+ * @LastEditTime: 2025-03-14 09:43:46
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoiceModel.cpp
*/
#include "aivoice/include/AiVoiceModel.h"
auto it = selectAiModelToTextId.find(GetSelectAiModel());
if (it != selectAiModelToTextId.end())
{
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[QuerySelectedAiModelIsConnect] SelectAiModel = %d", it->second.second);
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[QuerySelectedAiModelIsConnect] SelectAiModel = %d", it->second.second);
inquire_AI_is_ready(it->second.second);
}
}
+ // 获取当前正在使用的AI模型
+ uint8_t AiVoiceModel::GetCurUsingAiModelType(void)
+ {
+ auto it = selectAiModelToTextId.find(GetSelectAiModel());
+ if (it != selectAiModelToTextId.end())
+ {
+ return it->second.second;
+ }
+ return 0;
+ }
+
/*取消当前AI对话*/
void AiVoiceModel::CancelCurAIChat(void)
{
}
// 函数定义:移除列表的最后两项或清空列表
- void AiVoiceModel::RemoveLastTwoItemsOrClear()
+ bool AiVoiceModel::RemoveLastTwoItemsOrClear()
{
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AiVoiceModel::RemoveLastTwoItemsOrClear");
AivoiceReturnResultTextView *p_AivoiceReturnResultTextView = AivoiceReturnResultTextView::GetInstance();
if (p_AivoiceReturnResultTextView == nullptr)
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AivoiceReturnResultTextView::GetInstance fail!!");
- return;
+ return false;
}
// 获取适配器
AivoiceChatContentListAdapter *adapter = p_AivoiceReturnResultTextView->GetAivoiceChatContentListAdapter();
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "listSize = %d", listSize);
ChatContentListCount -= (listSize < 2 ? listSize : 2);
}
+ return true;
}
/* 更新用户问题字符串 */
{
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AiVoiceModel::UpdateUserQuestionStr");
- RemoveLastTwoItemsOrClear();
+ if(!RemoveLastTwoItemsOrClear())
+ {
+ return false;
+ }
+
if (!AddUserQuestionToChatItems())
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AddUserQuestionToChatItems fail!!");
usleep(50000); // 延时等待创建完成,0.05秒
}
/* -------------------------------------------------------------------------- */
- userQuestionStr += str;
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "传入的问题:%s",str.c_str());
+ userQuestionStr = str;
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "拼接的问题:%s",userQuestionStr.c_str());
/* -------------------------------------------------------------------------- */
SendMsgToUIService(UI_UPDATE_USER_QUESTION_STR, 0, nullptr, 0);
}
}
}
aiAnswerStr += str;
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "接受字的符串:%s", aiAnswerStr.c_str());
SendMsgToUIService(UI_UPDATE_AI_ANSWER_STR, 0, nullptr, 0);
}
{
#endif
int32_t AudioCaptureSample(int32_t argc, const char *argv[]);
- int32_t streamingRecordAndSend_AI(void);
+ int32_t streamingRecordAndSend_AI(int type);
#define IS_SUPPORT_REALTIME_RECORD_SEND_AI 1 //是否支持实时发送录音数据
#ifdef __cplusplus
};
(view_->GetAiVoiceScrollView(AIVOICE_LISTENING_VIEWID)->IsVisible()))
{
#if IS_SUPPORT_REALTIME_RECORD_SEND_AI
- streamingRecordAndSend_AI();//实时发送录音数据
+ int type = GetCurUsingAiModelType();
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "type = %d", type);
+ streamingRecordAndSend_AI(type);//实时发送录音数据
#else
std::string audioPath = AiVoiceModel::GetInstance().GetAIAudioPath();
if (uapi_delete_files(audioPath.c_str())) // 先删除文件
* @Author: luozheng 1732036298@qq.com
* @Date: 2024-06-20 15:11:17
* @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2025-03-12 10:45:44
+ * @LastEditTime: 2025-03-13 11:52:43
* @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/aivoice/src/AiVoicePresenter.cpp
*/
#include "AppViewIDs.h"
{
WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "CancelCurAIChat");
AiVoiceModel::GetInstance().CancelCurAIChat();
- AiVoiceModel::GetInstance().sendAIIsReady();
+ // AiVoiceModel::GetInstance().sendAIIsReady();
PlayersModel::GetInstance()->HandPausePhoneMusic(); // 暂停手机音乐
PlayersModel::GetInstance()->PlayerPause(); // 暂停手机音乐
}
if (isScroll)
{
// 监听,让List实现滚动
- AivoiceReturnResultTextView::GetInstance()->GetChatContentList()->ScrollBy(-150);
+ AivoiceReturnResultTextView::GetInstance()->GetChatContentList()->ScrollBy(-120);
isScroll = false;
}
}
return crcbuf;\r
}\r
\r
+uint8_t Calculate_CRC_AI(uint8_t *data,uint16_t len)\r
+{\r
+ return Calculate_CRC(data,len);\r
+}\r
+\r
static uint8_t Calculate_CRC_Big(uint8_t *data,uint16_t len)//计算20byte\r
{\r
uint8_t crcbuf = 0;\r
void cancel_AI_cur_chat(void);
void cancel_AI_cur_chat_(void);
+uint8_t Calculate_CRC_AI(uint8_t *data,uint16_t len);
+
void GetCurDataCmd(uint16_t cmd,uint8_t *data,uint16_t len,uint8_t *totaldata,uint8_t crcvalue);
bool get_ctkd_flag(void);
uint32_t send_msg_data_into_Ai_msg_queue_count=0;\r
\r
\r
-void AI_data_assembly(uint8_t type,uint8_t *buf)\r
+void AI_data_assembly(uint8_t type,uint8_t *buf,uint8_t aitype)\r
{\r
\r
memset_s(buf,ble_nus_max_data_len,0,19);\r
memcpy(buf + 11, &temp_data, 4); // 数据包ID\r
memcpy(buf + 15, &temp_data, 2); // 包数据长度\r
\r
- buf[18] = 0; // 计算CRC\r
+ buf[17] = aitype;\r
+ buf[18] = Calculate_CRC_AI(buf,18);; // 计算CRC\r
}\r
\r
static uint8_t g_blesrv_mail_flag=0;\r
int send_msg_data_into_Ai_msg_queue(void *buff,uint16_t len,uint8_t type);
-void AI_data_assembly(uint8_t type,uint8_t *buf);
-
+void AI_data_assembly(uint8_t type,uint8_t *buf,uint8_t aitype);
void set_AI_interval(uint8_t data);
}
/* ------------------------------- AI录音数据上传接口 ------------------------------- */
-#define AI_RECORD_TEST 1 //若需要调试可以打开该宏
+#define AI_RECORD_TEST 0 //若需要调试可以打开该宏
#include "bleService.h"
static uint32_t AI_audio_size=0;
+static uint8_t Cur_AI_Model= 0;
static void* AudioCaptureProcess_AI(void* arg)
{
#if AI_RECORD_TEST
g_audioSourceProcessInput.bThreadRun = true;
uint8_t start_data[19]={0};
- AI_data_assembly(1,start_data);
+ AI_data_assembly(1,start_data, Cur_AI_Model);
send_msg_data_into_Ai_msg_queue((void *)start_data,19,1);
AI_audio_size=0;
if (readCnt++ > READ_COUNT_MAX) {
break;
}
+ #if AI_RECORD_TEST
if (readCnt % GET_AUDIO_TIME_INTERVAL_TIMES == 0) {
if (g_audioCap->GetAudioTime(timeStamp, Timestamp::Timebase::MONOTONIC)) {
MEDIA_INFO_LOG("read %d frames timestamp seconds:%ld, nanoseconds:%ld",
}
}
MEDIA_INFO_LOG("audioCap Read readCnt = %d, size = %d", readCnt, ret);
+ #endif
}
#if AI_RECORD_TEST
fclose(pfd);
#endif
MEDIA_ERR_LOG("AI_audio_size %d",AI_audio_size);
- AI_data_assembly(0,start_data);
+ AI_data_assembly(0,start_data,Cur_AI_Model);
send_msg_data_into_Ai_msg_queue((void *)start_data,19,2);
return NULL;
}
-int32_t streamingRecordAndSend_AI(void)
+int32_t streamingRecordAndSend_AI(int type)
{
const char *argv[] = {"01", "sbc", "16000", "1", "16", "/user/aiRecord.sbc"};
int32_t argc = 6;
+ Cur_AI_Model = type;
if (g_audioSourceProcessInput.bThreadRun) {
return HandleAudioCaptureCmd(argc, argv);
}
audioCapturerInfo.streamType = AUDIO_STREAM_VOICE_RECORD;
ret = AudioCaptureSetInfo(audioCapturerInfo);
if (ret != 0) {
+ #if AI_RECORD_TEST
fclose(pfd);
+ #endif
g_audioCap.reset();
(void)g_amInstance.DeactivateAudioInterrupt(g_sample.interrupt);
goto EXIT;
int32_t AudioCaptureSample(int32_t argc, const char *argv[]);
-int32_t streamingRecordAndSend_AI(void);
+int32_t streamingRecordAndSend_AI(int type);
#ifdef __cplusplus
};