作者 ookk303

当日更新

... ... @@ -290,6 +290,7 @@ int JZsdk_GetFrameTemplate(int InsCode ,char *str, int *str_len)
memcpy(str, sendbuf, 12);
*str_len = 12;
}
break;
case JZ_INSCODE_5BFRAME_FILE_DECODE_DEFEAT:
{
... ... @@ -297,6 +298,7 @@ int JZsdk_GetFrameTemplate(int InsCode ,char *str, int *str_len)
memcpy(str, sendbuf, 12);
*str_len = 12;
}
break;
case JZ_INSCODE_5BFRAME_DEFEAT:
{
... ... @@ -389,15 +391,15 @@ int JZsdk_GetFrameTemplate(int InsCode ,char *str, int *str_len)
}
break;
case JZ_INSCODE_5BFRAME_MUSICLIST_STOP:
case JZ_INSCODE_5BFRAME_CHECKSTATUS_AUDIO_DETAIL_MESSAGE:
{
char sendbuf[12] = { 0x5b, 0x5b, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x58, 0xff, 0x00, 0x00, 0x23};
memcpy(str, sendbuf, 12);
*str_len = 12;
char sendbuf[14] = { 0x5b, 0x5b, 0x77, 0x00, 0x0c, 0x01, 0x00, 0x58, 0x03, 0x00, 0x00, 0x00, 0x00, 0x23};
memcpy(str, sendbuf, 14);
*str_len = 14;
}
break;
case JZ_INSCODE_5BFRAME_CHECKSTATUS_AUDIO_DETAIL_MESSAGE:
case JZ_INSCODE_5BFRAME_MUSICLIST_STOP:
{
char sendbuf[12] = { 0x5b, 0x5b, 0x77, 0x00, 0x0c, 0x00, 0x00, 0x58, 0xff, 0x00, 0x00, 0x23};
memcpy(str, sendbuf, 12);
... ... @@ -405,6 +407,8 @@ int JZsdk_GetFrameTemplate(int InsCode ,char *str, int *str_len)
}
break;
break;
case JZ_INSCODE_5BFRAME_OPUS_DECODE_STATUS:
{
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
//3、校验
//将unsigned char的码值转换成U32_t
U32_t CheckSum = 0;
memcpy(&CheckSum, checksum, checksum_len);
if (CheckSum != LocalCheckSum)
U32_t SRC_CheckSum = checksum[0] << 24 | checksum[1] << 16 | checksum[2] << 8 | checksum[3];
if (SRC_CheckSum != LocalCheckSum)
{
JZSDK_LOG_ERROR("checksum error\n");
JZSDK_LOG_ERROR("checksum error local:%x src:%x", LocalCheckSum, SRC_CheckSum);
ret = JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
}
else
{
JZSDK_LOG_INFO("checksum success\n");
JZSDK_LOG_INFO("checksum success local:%x src:%x", LocalCheckSum, SRC_CheckSum);
ret = JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
... ...
... ... @@ -349,7 +349,7 @@ int Main_APP_Uart()
//lib库初始化
JZsdk_LibInit();
JZSDK_LOG_INFO("%x,UartVersion%x.%x.%x.%x\n",DEVICE_VERSION,MAJOR_VERSION, MINOR_VERSION, MODIFY_VERSION, DEBUG_VERSION);
JZSDK_LOG_INFO("0x%x,UartVersion%x.%x.%x.%x\n",DEVICE_VERSION,MAJOR_VERSION, MINOR_VERSION, MODIFY_VERSION, DEBUG_VERSION);
//引脚初始化
Ircut_Init();
... ... @@ -707,7 +707,7 @@ static void *Main_WorkModeTask(void *arg)
exit(0);
}
#elif APP_VERSION == APP_PSDK
JZSDK_LOG_INFO("选择开始psdk播报");
#endif
#if MEGAPHONE_CONFIG_STATUS == VERSION_SWITCH_ON
... ...
... ... @@ -611,7 +611,6 @@ static T_JZsdkReturnCode RecvDeal_SaveAudioFileTrans_stop_and_check(int Port, ch
if (CodeLenth != 0)
{
memcpy(checkCode, &getbuf[10], CodeLenth);
JZSDK_LOG_INFO("checkCode :%s", checkCode);
}
else
{
... ... @@ -625,10 +624,12 @@ static T_JZsdkReturnCode RecvDeal_SaveAudioFileTrans_stop_and_check(int Port, ch
if (getbuf[9] == 0)
{
checkType = JZSDK_CHECK_SUM_TYPE_MD5;
JZSDK_LOG_INFO("checkCode :%s", checkCode);
}
else if (getbuf[9] == 1)
{
checkType = JZSDK_CHECK_SUM_TYPE_SRC32;
JZSDK_LOG_INFO("checkCode :%x", checkCode);
}
else
{
... ... @@ -909,8 +910,10 @@ static T_JZsdkReturnCode RecvDeal_CheckStatus_AudioDetailMessage(int Port, char
//4、解析音频名字
char AudioName[128];
int AudioNameLength = 0;
AudioNameLength = frameLenth - 9 - 2;
memcpy(AudioName, getbuf + 9, AudioNameLength);
AudioNameLength = frameLenth - 11 - 2;
memcpy(AudioName, getbuf + 11, AudioNameLength);
JZSDK_LOG_INFO("解析%s",AudioName);
#if MEGAPHONE_CONFIG_STATUS == VERSION_SWITCH_ON
... ...
... ... @@ -425,7 +425,7 @@ T_JZsdkReturnCode JZsdk_Uart_SentDeal_Reply_Musiclist(int UartPort ,int FrameSeq
//发送音频详细信息帧
T_JZsdkReturnCode JZsdk_Uart_SendDeal_Send_AudioDetailMessage(int Uartport, int FrameSequence, unsigned char type ,unsigned char *data, unsigned int datalen)
{
printf("发送播放状态结束\n");
printf("发送音频详细信息\n");
unsigned char sendbuf[256];
int send_buf_len;
... ...
... ... @@ -5,16 +5,86 @@
#include "JZsdkLib.h"
T_JZsdkReturnCode PcmNoiseReduction(unsigned char *data, int len, int threshold)
// T_JZsdkReturnCode PcmNoiseReduction(unsigned char *data, int len, int threshold)
// {
// for (int i = 0; i < len; i++)
// {
// if (abs(data) >= 0xFF)
// {
// data[i] = 0;
// }
// }
// return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
// }
#define NOISE_THRESHOLD 0.05 // 降噪阈值
T_JZsdkReturnCode reduce_noise(float* samples, int num_samples) {
for (int i = 0; i < num_samples; i++) {
if (fabs(samples[i]) < NOISE_THRESHOLD) {
samples[i] = 0.0f; // 如果样本小于阈值,则将其置为零
}
}
}
T_JZsdkReturnCode PcmNoiseReduction(short *data, int len)
{
for (int i = 0; i < len; i++)
float float_buffer[len];
// 转换为浮点数并进行降噪
for (size_t i = 0; i < len; i++) {
float_buffer[i] = data[i] / 32768.0f; // 从16-bit转换到 [-1.0, 1.0]
}
reduce_noise(float_buffer, len);
// 转换回16-bit并写入输出文件
for (size_t i = 0; i < len; i++)
{
if (abs(data) >= 0xFF)
{
data[i] = 0;
}
data[i] = (short)(float_buffer[i] * 32767.0f); // 溢出处理
}
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
}
// #define NOISE_THRESHOLD 0.05 // 降噪阈值
// // 字节交换函数
// short swap_endian(short val) {
// return (val >> 8) | (val << 8);
// }
// T_JZsdkReturnCode reduce_noise(float* samples, int num_samples) {
// for (int i = 0; i < num_samples; i++) {
// if (fabs(samples[i]) < NOISE_THRESHOLD) {
// samples[i] = 0.0f; // 如果样本小于阈值,则将其置为零
// }
// }
// }
// T_JZsdkReturnCode PcmNoiseReduction(U16_t *data, int len)
// {
// float float_buffer[len];
// // 将大端格式转换为浮点数
// for (size_t i = 0; i < len; i++) {
// // 字节交换
// short sample = swap_endian(data[i]);
// float_buffer[i] = sample / 32768.0f; // 从16-bit转换到 [-1.0, 1.0]
// }
// reduce_noise(float_buffer, len);
// // 转换回16-bit并写入输出文件
// for (size_t i = 0; i < len; i++)
// {
// data[i] = (U16_t)(float_buffer[i] * 32767.0f); // 溢出处理
// data[i] = swap_endian(data[i]);
// }
// return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
// }
... ...
... ... @@ -34,6 +34,7 @@ T_JZsdkReturnCode Start_voice()
//播放喊话器启动中
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);
delayS(2);
}
delayS(4);
... ...
... ... @@ -283,23 +283,39 @@ static void *DecodeAudioData_task(void *arg)
USER_LOG_INFO("decode data to file: %d\r\n", frame_size * WIDGET_SPEAKER_AUDIO_OPUS_CHANNELS);
/* Convert to little-endian ordering. */
for (i = 0; i < WIDGET_SPEAKER_AUDIO_OPUS_CHANNELS * frame_size; i++) {
opus_int16 TempPcm[WIDGET_SPEAKER_AUDIO_OPUS_MAX_FRAME_SIZE * WIDGET_SPEAKER_AUDIO_OPUS_CHANNELS];
for (i = 0; i < WIDGET_SPEAKER_AUDIO_OPUS_CHANNELS * frame_size; i++) {
// if (out[i] == 0xFFFF)
// {
// pcm_bytes[2 * i] = 0x00;
// pcm_bytes[2 * i + 1] = 0x00;
// continue;
// }
//方案一
TempPcm [i] = out[i] & 0xFF | (out[i] >> 8) << 8;
PcmNoiseReduction(TempPcm, 1);
//方案二
// TempPcm [i] = ((out[i] & 0xFF) << 8) | (out [i] >> 8);
// PcmNoiseReduction(TempPcm, 1);
// TempPcm [i] = TempPcm[i] & 0xFF | (TempPcm[i] >> 8) << 8;
// pcm_bytes[2 * i] = out[i] & 0xFF;
// pcm_bytes[2 * i + 1] = (out[i] >> 8) & 0xFF;
}
fwrite(TempPcm, sizeof(short), frame_size * WIDGET_SPEAKER_AUDIO_OPUS_CHANNELS, fout);
if (out[i] == 0xFFFF)
{
pcm_bytes[2 * i] = 0x00;
pcm_bytes[2 * i + 1] = 0x00;
continue;
}
pcm_bytes[2 * i] = out[i] & 0xFF;
pcm_bytes[2 * i + 1] = (out[i] >> 8) & 0xFF;
}
//PcmNoiseReduction(pcm_bytes, frame_size * WIDGET_SPEAKER_AUDIO_OPUS_CHANNELS * 2);
/* Write the decoded audio to file. */
fwrite(pcm_bytes, sizeof(short), frame_size * WIDGET_SPEAKER_AUDIO_OPUS_CHANNELS, fout);
//fwrite(pcm_bytes, sizeof(short), frame_size * WIDGET_SPEAKER_AUDIO_OPUS_CHANNELS, fout);
}
... ...