修改录音采集 1819/1 1819/head 1820/target/1
authorhcj <1224667075@qq.com>
Wed, 11 Jun 2025 06:19:07 +0000 (14:19 +0800)
committerhcj <1224667075@qq.com>
Wed, 11 Jun 2025 06:19:07 +0000 (14:19 +0800)
code/sdk/drivers/peripheral/slip/cat1Service/cat1_ws.cpp
code/sdk/drivers/peripheral/slip/cat1Service/dev_authentication.cpp
code/sdk/drivers/peripheral/slip/cat1Service/http_cat1.cpp
code/sdk/middleware/services/media/foundation/sample/wrapper/voice_call_volte_sample_wrapper.cpp
code/sdk/middleware/services/media/foundation/sample/wrapper/voice_call_volte_sample_wrapper.h
code/sdk/middleware/services/media/hal/audio/plugins/brandy/primary/primary_sub_port_in.c

index 3765e89..00b8081 100644 (file)
@@ -141,8 +141,11 @@ void * aic_zalloc(unsigned int len)
     return malloc(len);
 }
 
- void uapi_start_tts_single_txt(char *buf);
+void uapi_start_tts_single_txt(char *buf);
 
+void uapi_start_tts_single(void);
+
+uint8_t server_state=0;
 
 // free
 
@@ -866,6 +869,14 @@ void send_ai_txt(uint8_t type,char *msg)
     
     if (send_websocket_message(chat_client,( const unsigned char *)jsonString,strlen(jsonString),WS_TEXT)==0)
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message succ 0\n");
+    else
+    {
+        if(chat_client==NULL)
+        {
+             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"chat_client is NULL\n");
+        }
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message fail\n");
+    }
  
     cJSON_free(jsonString);
 }
@@ -901,9 +912,15 @@ bool chat_result_analysis(char *buf)
             memset_s(content_str_chat,64,0,64); 
             memcpy_s(content_str_chat,64,content_str,strlen(content_str)); 
             ble_set_ai_Answer_str(content_str_chat,2);
-            uapi_start_tts_single_txt(content_str_chat);
-
+            // uapi_start_tts_single_txt(content_str_chat);
+            static uint8_t test=1;
+            if(test)
+            {
+                uapi_start_tts_single();
+                test=0;
 
+            }
+           
         }
 
     }
@@ -935,21 +952,22 @@ void bk_websocket_demo(void *data) {
     /* code */
         is_bk_websocket_chat=1;
 
-        char url_buf[124]={0};
-        if(chat_ws_url_init(url_buf))
-        {
-            printf("%s\r\n",url_buf);
-        }
-        else
-        {
-            is_bk_websocket_chat=0;
-            return;
-        }
+        // char url_buf[124]={0};
+        // if(chat_ws_url_init(url_buf))
+        // {
+        //     printf("%s\r\n",url_buf);
+        // }
+        // else
+        // {
+        //     is_bk_websocket_chat=0;
+        //     return;
+        // }
         uint8_t client_count=3;
 
         while (client_count)
         {
-            chat_client = init_websocket_client(url_buf,NULL,1);
+            // http://118.145.158.207:22080ws://118.145.158.207:22080/chat/ws
+            chat_client = init_websocket_client("ws://118.145.158.207:22080/chat/ws",NULL,0);
 
             if (chat_client== NULL) {
             client_count--;
@@ -965,6 +983,12 @@ void bk_websocket_demo(void *data) {
            return;
         }
         
+        server_state=0x02^server_state;
+        if(server_state==0b00000111)
+        {
+            // uapi_start_asr();
+        }
+
         
         // send_ai_txt(1,"你是谁");
 
@@ -996,10 +1020,13 @@ void bk_websocket_demo(void *data) {
 #include "common_def.h"
 #include "los_printf.h"
 
-#define CAT1_SERVICE_TASK_SIZE       (0x1000*1)
+#define CAT1_SERVICE_TASK_SIZE       (2048)
 #define CAT1_SERVICE_TASK_PRIO       5
 
 
+
+
+
 errcode_t chat_server_init(void)
 {
     if(chat_client || is_bk_websocket_chat)
@@ -1032,7 +1059,7 @@ errcode_t chat_server_init(void)
 
 // http://118.145.158.207:22080ws://amp.raisound.com/asr/ws
 
-char asr_recv_buf[1024]={0};
+char *asr_recv_buf=NULL;//[1024]={0};
 WebSocketClient *asr_client;
 
 int32_t uapi_tts_paly_init(void);
@@ -1049,7 +1076,7 @@ void uapi_start_asr(void)
     else
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message  erro\n");
 
-    uapi_tts_paly_stop();
+    // uapi_tts_paly_stop();
 }
 
 //停止对话
@@ -1074,6 +1101,10 @@ void send_ai_bin(char *buf,uint32_t len)
         // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message succ 0\n");
         bk_sleep(10);
     }
+    else
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"send_websocket_message fail 0\n");
+    }
     // 
 }
 
@@ -1166,14 +1197,23 @@ bool aer_result_analysis(char *buf)
         SendMsgToUIService(UI_AI_JUMP_TO_RESULT_VIEW, 0, nullptr, 0);//先跳转到结果界面
         ble_set_ai_Question_str(result_str_asr);
         send_ai_txt(0,result_str_asr);
+
+        uapi_stop_asr();
+        stop_AudioCaptureProcess_AI();
     }
     if(strcmp(event_str,"TranscriptionStarted")==0)
     {
         //查询结果
         // streamingRecordAndSend_AI(0);
-        bool state = true;
-        SendMsgToUIService(UI_AI_JUMP_TO_LISTENING_VIEW, 0, &state, sizeof(bool));
+        // bool state = true;
+        // SendMsgToUIService(UI_AI_JUMP_TO_LISTENING_VIEW, 0, &state, sizeof(bool));
+        startAudioCaptureTask();
+    }
+    if(strcmp(event_str,"Failed")==0)
+    {
+        stop_AudioCaptureProcess_AI();
     }
+
     cJSON_Delete(root);
     return true;
 
@@ -1197,9 +1237,11 @@ bool asr_ws_url_init(char * put_buf)
     {
         return false;
     }
-   
 }
 
+
+
+
 void bk_websocket_asr(void *data) {
   
     // while (1)
@@ -1211,22 +1253,22 @@ void bk_websocket_asr(void *data) {
 
     {
         //ws://amp.raisound.com/asr/ws
-        char url_buf[124]={0};
-        if(asr_ws_url_init(url_buf))
-        {
-            printf("%s\r\n",url_buf);
-        }
-        else 
-        {
-            return;
-        }
+        // char url_buf[124]={0};
+        // if(asr_ws_url_init(url_buf))
+        // {
+        //     printf("%s\r\n",url_buf);
+        // }
+        // else 
+        // {
+        //     return;
+        // }
 
         uint8_t client_count=3;
 
         while (client_count)
         {
-            // asr_client = init_websocket_client("ws://118.145.158.207:22080/asr/ws",NULL,0);
-            asr_client = init_websocket_client(url_buf,NULL,1);
+            asr_client = init_websocket_client("ws://118.145.158.207:22080/asr/ws",NULL,0);
+            // asr_client = init_websocket_client(url_buf,NULL,1);
             if (asr_client== NULL) {
                  printf("init_websocket_client fail %d\r\n",client_count);
                 client_count--;
@@ -1243,6 +1285,14 @@ void bk_websocket_asr(void *data) {
 
         uapi_cat1_keep_wakeup(1);
 
+        server_state=0x01^server_state;
+        if(server_state==0b00000111)
+        {
+            // uapi_start_asr();
+        }
+       
+        asr_recv_buf=(char *)malloc(0x400);
+        
         // uapi_start_asr();
         // SendMsgToUIService(UI_4G_AI_INIT_STAUS, 0,&state, sizeof(bool));
 
@@ -1262,7 +1312,7 @@ void bk_websocket_asr(void *data) {
             //
         }
 
-        
+        free(asr_recv_buf);
         close_websocket_client(asr_client);
         asr_client=NULL;
         // return;
@@ -1287,7 +1337,7 @@ errcode_t asr_server_init(void)
     taskcfg.create_queue_handle = NULL;
     taskcfg.attr.name="asr_server_init";
     taskcfg.attr.priority = TASK_PRIORITY_APP;
-    taskcfg.attr.stack_size = CAT1_SERVICE_TASK_SIZE;
+    taskcfg.attr.stack_size = 0x1000;
     taskcfg.func = bk_websocket_asr;
     taskcfg.use_mem = USE_EXTEND_MEM;
   
@@ -1467,7 +1517,13 @@ void bk_websocket_tts(void *data) {
            return;
         }
 
-        uapi_start_tts_single();
+        server_state=0x04^server_state;
+        if(server_state==0b00000111)
+        {
+            // uapi_start_asr();
+        }
+
+       
         char* tts_recv_buf=(char *)malloc(1024*4);
 
         while (1)
@@ -1513,7 +1569,7 @@ errcode_t tts_server_init(void)
     taskcfg.create_queue_handle = NULL;
     taskcfg.attr.name="tts_server_init";
     taskcfg.attr.priority = TASK_PRIORITY_APP;
-    taskcfg.attr.stack_size = CAT1_SERVICE_TASK_SIZE;
+    taskcfg.attr.stack_size = 0x1000;
     taskcfg.func = bk_websocket_tts;
     taskcfg.use_mem = USE_EXTEND_MEM;
   
@@ -1575,8 +1631,8 @@ bool init_ai_task(void)
     if(is_init_ai)
     {
         uapi_tts_paly_init();
-        // asr_server_init();
-        // chat_server_init();
+        asr_server_init();
+        chat_server_init();
         tts_server_init();
         // is_init_ai=0;
     }
index bd47102..d112dab 100644 (file)
@@ -447,17 +447,19 @@ void aut_active(void)//设备激活
 \r
     // 输出JSON\r
     printf("JSON output: %s\n", json_string);\r
-    extern void put_data_by_get_file(char *data,uint16_t data_len);\r
+    extern uint32_t put_data_by_get_file(char *data,uint16_t data_len);\r
 \r
     put_data_by_get_file(json_string,strlen(json_string));\r
 \r
     cJSON_free(json_string);\r
+\r
+\r
 }\r
 \r
 \r
 \r
 extern bool read_dev_pass(char *data_pass);\r
-extern void post_data_by_get_file(char *data,uint16_t data_len);\r
+extern uint32_t post_data_by_get_file(char *data,uint16_t data_len);\r
 \r
 \r
 void aut_login(void)//登录\r
index f3115ca..f0304a7 100644 (file)
@@ -28,9 +28,15 @@ extern "C" {
 
 #define  AUTH_SIGN_IN  "/user/userdata/sign_in.json"//上报升级得到的json
 
+osSemaphoreId_t put_done_sem;
 
+static uint32_t  put_srv_res=0;
 
 
+osSemaphoreId_t post_done_sem;
+
+static uint32_t  post_srv_res=0;
+
 static httpc_connection_t settings = {0};
 
 
@@ -51,8 +57,11 @@ static httpc_connection_t settings = {0};
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "httpc_download_result_ui");
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"httpc_download_result , httpc_result_t %d, rx_content_len %d , srv_res %d, err %d\n",
             httpc_result,rx_content_len,srv_res,err);
-        if(srv_res==200)
+        // if(srv_res==200)
         {
+            put_srv_res=srv_res;
+
+            (void)osSemaphoreRelease(put_done_sem);
             //激活成功
         }
         return ;
@@ -64,8 +73,12 @@ static httpc_connection_t settings = {0};
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "httpc_download_result_ui");
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"httpc_download_result , httpc_result_t %d, rx_content_len %d , srv_res %d, err %d\n",
             httpc_result,rx_content_len,srv_res,err);
-        if(srv_res==200)
+        // if(srv_res==200)
         {
+             post_srv_res=srv_res;
+            
+            (void)osSemaphoreRelease(post_done_sem);
+
             //登录成功
         }
         return ;
@@ -73,8 +86,9 @@ static httpc_connection_t settings = {0};
 
 
 
-void put_data_by_get_file(char *data,uint16_t data_len)
+uint32_t put_data_by_get_file(char *data,uint16_t data_len)
 {
+   
     memset_s(&settings,sizeof(settings),0,sizeof(settings));
     settings.use_proxy=0;
     
@@ -97,11 +111,25 @@ void put_data_by_get_file(char *data,uint16_t data_len)
         (const char*) otadatapath, 
             &connection);
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"custom_start_ota_download %d \r\n",rett);
-    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "use_put");      
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "use_put");
+
+    if(rett==0)
+    {
+        put_done_sem = osSemaphoreNew(1, 0, NULL);
+    
+        osSemaphoreAcquire(put_done_sem, 1000*30);
+        
+        osSemaphoreDelete(put_done_sem);
+        return put_srv_res;
+    }
+    else
+    {
+        return rett;
+    }   
 }
 
 
-void post_data_by_get_file(char *data,uint16_t data_len)
+uint32_t post_data_by_get_file(char *data,uint16_t data_len)
 {
     memset_s(&settings,sizeof(settings),0,sizeof(settings));
     settings.use_proxy=0;
@@ -126,6 +154,21 @@ void post_data_by_get_file(char *data,uint16_t data_len)
             &connection);
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"custom_start_ota_download %d \r\n",rett);
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "use_post");      
+
+     if(rett==0)
+    {
+        post_done_sem = osSemaphoreNew(1, 0, NULL);
+    
+        osSemaphoreAcquire(post_done_sem, 1000*30);
+        
+        osSemaphoreDelete(post_done_sem);
+        
+        return post_srv_res;
+    }
+    else
+    {
+        return rett;
+    }   
 }
 // {"success":true,
 // "msg":"激活成功.",
index 55ab83a..a58bdcf 100755 (executable)
@@ -1136,7 +1136,9 @@ static void AiDeinitVoiceCallVolteResources(VoiceCallVolteContext *context)
         g_voiceCallVolteContext = nullptr;
     }
 }
+#include "audio_capturer.h"
 
+static std::shared_ptr<OHOS::Audio::AudioCapturer> g_audioCap;
 
 
 static int32_t RunVoiceCallVolteAI(VoiceCallVolteContext *context)
@@ -1149,8 +1151,14 @@ static int32_t RunVoiceCallVolteAI(VoiceCallVolteContext *context)
     int32_t ret ;
 
     g_stream_out_downink = std::make_shared<AudioStreamOut>();
+
+
+    if (ret != 0) {
+        MEDIA_ERR_LOG("audio stream out uplink init failed");
+    }
+
     // 16000 32000 44100 48000
-    AudioRendererConfig renderConfig = {};
+    AudioRendererConfig  renderConfig = {};
     renderConfig.audioFormat =  PCM;
     renderConfig.channelCount = 1;
     renderConfig.linkDir = AUDIO_DOWN_LINK;
@@ -1168,7 +1176,6 @@ static int32_t RunVoiceCallVolteAI(VoiceCallVolteContext *context)
         MEDIA_ERR_LOG("audio stream out downink play failed");
     }
 
-
     // uint32_t asiDownlinkChannelId = 0;
 
     // MEDIA_INFO_LOG("asiDownlinkChannelId: 0x%x", asiDownlinkChannelId);
@@ -1226,6 +1233,98 @@ static void *VoiceAIThread(void *priv)
     return nullptr;
 }
 
+#include "bleService.h"
+static uint32_t AI_audio_size=0;
+static uint8_t Cur_AI_Model= 0;
+
+uint8_t g_sample_needStop=0;
+
+uint8_t AudioCaptureTask_is_run=0;
+
+void stop_AudioCaptureProcess_AI(void)
+{
+    g_sample_needStop=1;
+}
+
+static void* AudioCaptureProcess_AI(void* arg)
+{
+    MEDIA_ERR_LOG("AudioCaptureProcess_AI");
+
+    (void)g_stream_in_uplink.reset();
+
+    g_stream_in_uplink = std::make_shared<AudioStreamIn>();
+
+    
+    CapturerInputConfig captureConfig = {};
+    captureConfig.audioFormat = MP3;
+    captureConfig.channelCount = 1;
+    captureConfig.linkDir = AUDIO_UP_LINK;
+    captureConfig.sampleRate = 16000;
+    captureConfig.sessionID = g_sessionId;
+    captureConfig.streamType = AUDIO_STREAM_VOICE_ASSISTANT;
+
+    int  ret = g_stream_in_uplink->Init(captureConfig);
+
+
+    // AI_data_assembly(1,start_data, Cur_AI_Model);
+    ret = g_stream_in_uplink->Start();
+    if (ret != 0) {
+        MEDIA_ERR_LOG("audio stream out downink play failed");
+        return NULL;
+
+    }
+    MEDIA_ERR_LOG("g_stream_in_uplink->Start");
+
+    uint8_t* data_buf=(uint8_t *)malloc(1024);
+
+    MEDIA_ERR_LOG("malloc");
+
+    AudioCaptureTask_is_run=1;
+
+    while (!g_sample_needStop) {
+        LOS_Msleep(10);
+        CapturerBuffer capBuf = {};
+        capBuf.data = data_buf;
+        capBuf.size = 1024;
+        capBuf.frameCount = 1;
+        int32_t readlen = g_stream_in_uplink->ObtainBuffer(capBuf, true);
+        if(readlen>0)
+        {
+            //  MEDIA_ERR_LOG("readlen %d",readlen);
+            send_msg_data_into_Ai_msg_queue((void *)data_buf,(uint16_t)readlen,0);
+            memset_s(data_buf,1024,0,1024);
+        }
+        
+        // 蓝牙接口发送实时录音数据
+    }
+    free(data_buf);
+    MEDIA_ERR_LOG("AI_audio_size %d",AI_audio_size);
+
+    ret = g_stream_in_uplink->Stop();
+
+    g_stream_in_uplink->Release();
+
+    (void)g_stream_in_uplink.reset();
+
+    g_sample_needStop=0;
+
+    MEDIA_INFO_LOG("AudioCaptureProcess end");
+    AudioCaptureTask_is_run=0;
+    return NULL;
+}
+
+
+void startAudioCaptureTask(void)
+{
+    if(AudioCaptureTask_is_run)
+    {
+        MEDIA_ERR_LOG("AudioCaptureTask_is_run  %d",AudioCaptureTask_is_run);
+        return;
+    }   
+    MediaThreadattr attr = { "AudioCaptureTask", 0x1000, THREAD_SCHED_INVALID, 0, true };
+    MediaThreadCreate(AudioCaptureProcess_AI, NULL, &attr);
+}
+
 
 
 int32_t AIStreamWrite(uint8_t *buf,uint32_t size)
@@ -1263,7 +1362,7 @@ static int32_t StartAIpaly(const char **param)
     MediaMutexUnLock(g_voiceCallVolteContextMutex);
 
     // 3. create voice call volte thread
-    MediaThreadattr attr = { "VoiceCallVolteHFPThread", 0x2000, THREAD_SCHED_INVALID, 0, false };
+    MediaThreadattr attr = { "VoiceCallVolteHFPThread", 0x1000, THREAD_SCHED_INVALID, 0, false };
     g_voiceCallVolteContext->taskHandle  = MediaThreadCreate(VoiceAIThread, g_voiceCallVolteContext, &attr);
     if ( g_voiceCallVolteContext->taskHandle == nullptr) {
         MEDIA_ERR_LOG("create voice call volte  thread failed");
index 8a1f455..03f7368 100755 (executable)
@@ -23,6 +23,10 @@ int32_t AIStreamWrite(uint8_t *buf,uint32_t size);
 
 AudioSession get_ai_g_sessionId(void);
 
+void startAudioCaptureTask(void);
+
+void stop_AudioCaptureProcess_AI(void);
+
 #ifdef __cplusplus
 };
 #endif
index affafc5..acae0e7 100755 (executable)
@@ -97,6 +97,7 @@ static SubPortTrackInCapabilities g_caps[] = {
     { AUDIO_IN_COMMUNICATION, AUDIO_FORMAT_mSBC, 16000, 1 },
     { AUDIO_IN_COMMUNICATION, AUDIO_FORMAT_PCM_16_BIT, 8000, 1},
     { AUDIO_IN_COMMUNICATION, AUDIO_FORMAT_PCM_16_BIT, 16000, 1 },
+    { AUDIO_IN_COMMUNICATION, AUDIO_FORMAT_MP3, 16000, 1 },
 };
 
 static bool IsSupported(const struct PortPluginAttr *inputAttr)