作者 ookk303

当日更新

@@ -290,6 +290,7 @@ int JZsdk_GetFrameTemplate(int InsCode ,char *str, int *str_len) @@ -290,6 +290,7 @@ int JZsdk_GetFrameTemplate(int InsCode ,char *str, int *str_len)
290 memcpy(str, sendbuf, 12); 290 memcpy(str, sendbuf, 12);
291 *str_len = 12; 291 *str_len = 12;
292 } 292 }
  293 + break;
293 294
294 case JZ_INSCODE_5BFRAME_FILE_DECODE_DEFEAT: 295 case JZ_INSCODE_5BFRAME_FILE_DECODE_DEFEAT:
295 { 296 {
@@ -297,6 +298,7 @@ int JZsdk_GetFrameTemplate(int InsCode ,char *str, int *str_len) @@ -297,6 +298,7 @@ int JZsdk_GetFrameTemplate(int InsCode ,char *str, int *str_len)
297 memcpy(str, sendbuf, 12); 298 memcpy(str, sendbuf, 12);
298 *str_len = 12; 299 *str_len = 12;
299 } 300 }
  301 + break;
300 302
301 case JZ_INSCODE_5BFRAME_DEFEAT: 303 case JZ_INSCODE_5BFRAME_DEFEAT:
302 { 304 {
@@ -389,15 +391,15 @@ int JZsdk_GetFrameTemplate(int InsCode ,char *str, int *str_len) @@ -389,15 +391,15 @@ int JZsdk_GetFrameTemplate(int InsCode ,char *str, int *str_len)
389 } 391 }
390 break; 392 break;
391 393
392 - case JZ_INSCODE_5BFRAME_MUSICLIST_STOP: 394 + case JZ_INSCODE_5BFRAME_CHECKSTATUS_AUDIO_DETAIL_MESSAGE:
393 { 395 {
394 - char sendbuf[12] = { 0x5b, 0x5b, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x58, 0xff, 0x00, 0x00, 0x23};  
395 - memcpy(str, sendbuf, 12);  
396 - *str_len = 12; 396 + char sendbuf[14] = { 0x5b, 0x5b, 0x77, 0x00, 0x0c, 0x01, 0x00, 0x58, 0x03, 0x00, 0x00, 0x00, 0x00, 0x23};
  397 + memcpy(str, sendbuf, 14);
  398 + *str_len = 14;
397 } 399 }
398 break; 400 break;
399 401
400 - case JZ_INSCODE_5BFRAME_CHECKSTATUS_AUDIO_DETAIL_MESSAGE: 402 + case JZ_INSCODE_5BFRAME_MUSICLIST_STOP:
401 { 403 {
402 char sendbuf[12] = { 0x5b, 0x5b, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x58, 0xff, 0x00, 0x00, 0x23}; 404 char sendbuf[12] = { 0x5b, 0x5b, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x58, 0xff, 0x00, 0x00, 0x23};
403 memcpy(str, sendbuf, 12); 405 memcpy(str, sendbuf, 12);
@@ -405,6 +407,8 @@ int JZsdk_GetFrameTemplate(int InsCode ,char *str, int *str_len) @@ -405,6 +407,8 @@ int JZsdk_GetFrameTemplate(int InsCode ,char *str, int *str_len)
405 } 407 }
406 break; 408 break;
407 409
  410 + break;
  411 +
408 case JZ_INSCODE_5BFRAME_OPUS_DECODE_STATUS: 412 case JZ_INSCODE_5BFRAME_OPUS_DECODE_STATUS:
409 { 413 {
410 char sendbuf[13] = { 0x5b, 0x5b, 0x77, 0x00, 0x0D, 0x00, 0x00, 0x59, 0xf2, 0x00, 0x00, 0x00, 0x23}; 414 char sendbuf[13] = { 0x5b, 0x5b, 0x77, 0x00, 0x0D, 0x00, 0x00, 0x59, 0xf2, 0x00, 0x00, 0x00, 0x23};
@@ -50,16 +50,16 @@ static T_JZsdkReturnCode JZsdk_Check_Src32(unsigned char *DIR, unsigned char *ch @@ -50,16 +50,16 @@ static T_JZsdkReturnCode JZsdk_Check_Src32(unsigned char *DIR, unsigned char *ch
50 50
51 //3、校验 51 //3、校验
52 //将unsigned char的码值转换成U32_t 52 //将unsigned char的码值转换成U32_t
53 - U32_t CheckSum = 0;  
54 - memcpy(&CheckSum, checksum, checksum_len);  
55 - if (CheckSum != LocalCheckSum) 53 + U32_t SRC_CheckSum = checksum[0] << 24 | checksum[1] << 16 | checksum[2] << 8 | checksum[3];
  54 +
  55 + if (SRC_CheckSum != LocalCheckSum)
56 { 56 {
57 - JZSDK_LOG_ERROR("checksum error\n"); 57 + JZSDK_LOG_ERROR("checksum error local:%x src:%x", LocalCheckSum, SRC_CheckSum);
58 ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE; 58 ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
59 } 59 }
60 else 60 else
61 { 61 {
62 - JZSDK_LOG_INFO("checksum success\n"); 62 + JZSDK_LOG_INFO("checksum success local:%x src:%x", LocalCheckSum, SRC_CheckSum);
63 ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 63 ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
64 } 64 }
65 65
@@ -349,7 +349,7 @@ int Main_APP_Uart() @@ -349,7 +349,7 @@ int Main_APP_Uart()
349 //lib库初始化 349 //lib库初始化
350 JZsdk_LibInit(); 350 JZsdk_LibInit();
351 351
352 - JZSDK_LOG_INFO("%x,UartVersion%x.%x.%x.%x\n",DEVICE_VERSION,MAJOR_VERSION, MINOR_VERSION, MODIFY_VERSION, DEBUG_VERSION); 352 + JZSDK_LOG_INFO("0x%x,UartVersion%x.%x.%x.%x\n",DEVICE_VERSION,MAJOR_VERSION, MINOR_VERSION, MODIFY_VERSION, DEBUG_VERSION);
353 353
354 //引脚初始化 354 //引脚初始化
355 Ircut_Init(); 355 Ircut_Init();
@@ -707,7 +707,7 @@ static void *Main_WorkModeTask(void *arg) @@ -707,7 +707,7 @@ static void *Main_WorkModeTask(void *arg)
707 exit(0); 707 exit(0);
708 } 708 }
709 #elif APP_VERSION == APP_PSDK 709 #elif APP_VERSION == APP_PSDK
710 - 710 + JZSDK_LOG_INFO("选择开始psdk播报");
711 #endif 711 #endif
712 712
713 #if MEGAPHONE_CONFIG_STATUS == VERSION_SWITCH_ON 713 #if MEGAPHONE_CONFIG_STATUS == VERSION_SWITCH_ON
@@ -611,7 +611,6 @@ static T_JZsdkReturnCode RecvDeal_SaveAudioFileTrans_stop_and_check(int Port, ch @@ -611,7 +611,6 @@ static T_JZsdkReturnCode RecvDeal_SaveAudioFileTrans_stop_and_check(int Port, ch
611 if (CodeLenth != 0) 611 if (CodeLenth != 0)
612 { 612 {
613 memcpy(checkCode, &getbuf[10], CodeLenth); 613 memcpy(checkCode, &getbuf[10], CodeLenth);
614 - JZSDK_LOG_INFO("checkCode :%s", checkCode);  
615 } 614 }
616 else 615 else
617 { 616 {
@@ -625,10 +624,12 @@ static T_JZsdkReturnCode RecvDeal_SaveAudioFileTrans_stop_and_check(int Port, ch @@ -625,10 +624,12 @@ static T_JZsdkReturnCode RecvDeal_SaveAudioFileTrans_stop_and_check(int Port, ch
625 if (getbuf[9] == 0) 624 if (getbuf[9] == 0)
626 { 625 {
627 checkType = JZSDK_CHECK_SUM_TYPE_MD5; 626 checkType = JZSDK_CHECK_SUM_TYPE_MD5;
  627 + JZSDK_LOG_INFO("checkCode :%s", checkCode);
628 } 628 }
629 else if (getbuf[9] == 1) 629 else if (getbuf[9] == 1)
630 { 630 {
631 checkType = JZSDK_CHECK_SUM_TYPE_SRC32; 631 checkType = JZSDK_CHECK_SUM_TYPE_SRC32;
  632 + JZSDK_LOG_INFO("checkCode :%x", checkCode);
632 } 633 }
633 else 634 else
634 { 635 {
@@ -909,8 +910,10 @@ static T_JZsdkReturnCode RecvDeal_CheckStatus_AudioDetailMessage(int Port, char @@ -909,8 +910,10 @@ static T_JZsdkReturnCode RecvDeal_CheckStatus_AudioDetailMessage(int Port, char
909 //4、解析音频名字 910 //4、解析音频名字
910 char AudioName[128]; 911 char AudioName[128];
911 int AudioNameLength = 0; 912 int AudioNameLength = 0;
912 - AudioNameLength = frameLenth - 9 - 2;  
913 - memcpy(AudioName, getbuf + 9, AudioNameLength); 913 + AudioNameLength = frameLenth - 11 - 2;
  914 + memcpy(AudioName, getbuf + 11, AudioNameLength);
  915 +
  916 + JZSDK_LOG_INFO("解析%s",AudioName);
914 917
915 #if MEGAPHONE_CONFIG_STATUS == VERSION_SWITCH_ON 918 #if MEGAPHONE_CONFIG_STATUS == VERSION_SWITCH_ON
916 919
@@ -425,7 +425,7 @@ T_JZsdkReturnCode JZsdk_Uart_SentDeal_Reply_Musiclist(int UartPort ,int FrameSeq @@ -425,7 +425,7 @@ T_JZsdkReturnCode JZsdk_Uart_SentDeal_Reply_Musiclist(int UartPort ,int FrameSeq
425 //发送音频详细信息帧 425 //发送音频详细信息帧
426 T_JZsdkReturnCode JZsdk_Uart_SendDeal_Send_AudioDetailMessage(int Uartport, int FrameSequence, unsigned char type ,unsigned char *data, unsigned int datalen) 426 T_JZsdkReturnCode JZsdk_Uart_SendDeal_Send_AudioDetailMessage(int Uartport, int FrameSequence, unsigned char type ,unsigned char *data, unsigned int datalen)
427 { 427 {
428 - printf("发送播放状态结束\n"); 428 + printf("发送音频详细信息\n");
429 unsigned char sendbuf[256]; 429 unsigned char sendbuf[256];
430 int send_buf_len; 430 int send_buf_len;
431 431
@@ -5,16 +5,86 @@ @@ -5,16 +5,86 @@
5 5
6 #include "JZsdkLib.h" 6 #include "JZsdkLib.h"
7 7
8 -T_JZsdkReturnCode PcmNoiseReduction(unsigned char *data, int len, int threshold)  
9 -{  
10 - for (int i = 0; i < len; i++)  
11 - {  
12 - if (abs(data) >= 0xFF)  
13 - {  
14 - data[i] = 0; 8 +// T_JZsdkReturnCode PcmNoiseReduction(unsigned char *data, int len, int threshold)
  9 +// {
  10 +// for (int i = 0; i < len; i++)
  11 +// {
  12 +// if (abs(data) >= 0xFF)
  13 +// {
  14 +// data[i] = 0;
  15 +// }
  16 +// }
  17 +
  18 +
  19 +// return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  20 +// }
  21 +
  22 +
  23 +#define NOISE_THRESHOLD 0.05 // 降噪阈值
  24 +
  25 +T_JZsdkReturnCode reduce_noise(float* samples, int num_samples) {
  26 + for (int i = 0; i < num_samples; i++) {
  27 + if (fabs(samples[i]) < NOISE_THRESHOLD) {
  28 + samples[i] = 0.0f; // 如果样本小于阈值,则将其置为零
  29 + }
15 } 30 }
  31 +}
  32 +
  33 +T_JZsdkReturnCode PcmNoiseReduction(short *data, int len)
  34 +{
  35 + float float_buffer[len];
  36 +
  37 + // 转换为浮点数并进行降噪
  38 + for (size_t i = 0; i < len; i++) {
  39 + float_buffer[i] = data[i] / 32768.0f; // 从16-bit转换到 [-1.0, 1.0]
16 } 40 }
17 41
  42 + reduce_noise(float_buffer, len);
  43 +
  44 + // 转换回16-bit并写入输出文件
  45 + for (size_t i = 0; i < len; i++)
  46 + {
  47 + data[i] = (short)(float_buffer[i] * 32767.0f); // 溢出处理
  48 + }
18 49
19 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS; 50 return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
20 } 51 }
  52 +
  53 +// #define NOISE_THRESHOLD 0.05 // 降噪阈值
  54 +
  55 +// // 字节交换函数
  56 +// short swap_endian(short val) {
  57 +// return (val >> 8) | (val << 8);
  58 +// }
  59 +
  60 +// T_JZsdkReturnCode reduce_noise(float* samples, int num_samples) {
  61 +// for (int i = 0; i < num_samples; i++) {
  62 +// if (fabs(samples[i]) < NOISE_THRESHOLD) {
  63 +// samples[i] = 0.0f; // 如果样本小于阈值,则将其置为零
  64 +// }
  65 +// }
  66 +// }
  67 +
  68 +// T_JZsdkReturnCode PcmNoiseReduction(U16_t *data, int len)
  69 +// {
  70 +// float float_buffer[len];
  71 +
  72 +// // 将大端格式转换为浮点数
  73 +// for (size_t i = 0; i < len; i++) {
  74 +// // 字节交换
  75 +// short sample = swap_endian(data[i]);
  76 +// float_buffer[i] = sample / 32768.0f; // 从16-bit转换到 [-1.0, 1.0]
  77 +// }
  78 +
  79 +// reduce_noise(float_buffer, len);
  80 +
  81 +// // 转换回16-bit并写入输出文件
  82 +// for (size_t i = 0; i < len; i++)
  83 +// {
  84 +// data[i] = (U16_t)(float_buffer[i] * 32767.0f); // 溢出处理
  85 +
  86 +// data[i] = swap_endian(data[i]);
  87 +// }
  88 +
  89 +// return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
  90 +// }
@@ -34,6 +34,7 @@ T_JZsdkReturnCode Start_voice() @@ -34,6 +34,7 @@ T_JZsdkReturnCode Start_voice()
34 //播放喊话器启动中 34 //播放喊话器启动中
35 Megaphone_TTS_Play("The direct connection mode of the speaker is being activated", strlen("The direct connection mode of the speaker is being activated"), JZ_FLAGCODE_OFF); 35 Megaphone_TTS_Play("The direct connection mode of the speaker is being activated", strlen("The direct connection mode of the speaker is being activated"), JZ_FLAGCODE_OFF);
36 36
  37 + delayS(2);
37 } 38 }
38 39
39 delayS(4); 40 delayS(4);
@@ -283,23 +283,39 @@ static void *DecodeAudioData_task(void *arg) @@ -283,23 +283,39 @@ static void *DecodeAudioData_task(void *arg)
283 283
284 USER_LOG_INFO("decode data to file: %d\r\n", frame_size * WIDGET_SPEAKER_AUDIO_OPUS_CHANNELS); 284 USER_LOG_INFO("decode data to file: %d\r\n", frame_size * WIDGET_SPEAKER_AUDIO_OPUS_CHANNELS);
285 /* Convert to little-endian ordering. */ 285 /* Convert to little-endian ordering. */
  286 +
  287 + opus_int16 TempPcm[WIDGET_SPEAKER_AUDIO_OPUS_MAX_FRAME_SIZE * WIDGET_SPEAKER_AUDIO_OPUS_CHANNELS];
  288 +
286 for (i = 0; i < WIDGET_SPEAKER_AUDIO_OPUS_CHANNELS * frame_size; i++) { 289 for (i = 0; i < WIDGET_SPEAKER_AUDIO_OPUS_CHANNELS * frame_size; i++) {
  290 + // if (out[i] == 0xFFFF)
  291 + // {
  292 + // pcm_bytes[2 * i] = 0x00;
  293 + // pcm_bytes[2 * i + 1] = 0x00;
  294 + // continue;
  295 + // }
287 296
  297 + //方案一
  298 + TempPcm [i] = out[i] & 0xFF | (out[i] >> 8) << 8;
  299 + PcmNoiseReduction(TempPcm, 1);
288 300
  301 + //方案二
  302 + // TempPcm [i] = ((out[i] & 0xFF) << 8) | (out [i] >> 8);
  303 + // PcmNoiseReduction(TempPcm, 1);
  304 + // TempPcm [i] = TempPcm[i] & 0xFF | (TempPcm[i] >> 8) << 8;
289 305
290 - if (out[i] == 0xFFFF)  
291 - {  
292 - pcm_bytes[2 * i] = 0x00;  
293 - pcm_bytes[2 * i + 1] = 0x00;  
294 - continue;  
295 - } 306 + // pcm_bytes[2 * i] = out[i] & 0xFF;
  307 + // pcm_bytes[2 * i + 1] = (out[i] >> 8) & 0xFF;
296 308
297 - pcm_bytes[2 * i] = out[i] & 0xFF;  
298 - pcm_bytes[2 * i + 1] = (out[i] >> 8) & 0xFF;  
299 } 309 }
300 310
  311 + fwrite(TempPcm, sizeof(short), frame_size * WIDGET_SPEAKER_AUDIO_OPUS_CHANNELS, fout);
  312 +
  313 +
  314 + //PcmNoiseReduction(pcm_bytes, frame_size * WIDGET_SPEAKER_AUDIO_OPUS_CHANNELS * 2);
  315 +
  316 +
301 /* Write the decoded audio to file. */ 317 /* Write the decoded audio to file. */
302 - fwrite(pcm_bytes, sizeof(short), frame_size * WIDGET_SPEAKER_AUDIO_OPUS_CHANNELS, fout); 318 + //fwrite(pcm_bytes, sizeof(short), frame_size * WIDGET_SPEAKER_AUDIO_OPUS_CHANNELS, fout);
303 } 319 }
304 320
305 321