...
|
...
|
@@ -24,6 +24,8 @@ |
|
|
#include "Megaphone/Megaphone.h"
|
|
|
#include "Megaphone/Music/AudioFile/Megaphone_AudioFile.h"
|
|
|
#include "Megaphone/Opus/Megaphone_Opus.h"
|
|
|
#include "Megaphone/PcmAudio/PcmAudioFile.h"
|
|
|
|
|
|
#endif
|
|
|
|
|
|
static int HalRecvMode = JZ_FLAGCODE_OFF; //接收模式,主要是为了限制不同设备同时要求hal层做出 同一个数据接收相关功能 ,目前做法是只限定一个hal设备使用一种数据接收模式
|
...
|
...
|
@@ -705,15 +707,24 @@ static T_JZsdkReturnCode RecvDeal_audio_PlayFile(int Port, char *getbuf) |
|
|
**********/
|
|
|
static T_JZsdkReturnCode RecvDeal_audio_PlayContinue(int Port, char *getbuf)
|
|
|
{
|
|
|
T_JZsdkReturnCode ret;
|
|
|
|
|
|
JZSDK_LOG_INFO("%s,音频继续播放",JZsdk_DefineCode_GetPortName(Port));
|
|
|
|
|
|
//获取帧的序列号
|
|
|
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
|
|
|
|
|
|
UIcontrol_ContinuePlayAudio(Port);
|
|
|
|
|
|
ret = UIcontrol_ContinuePlayAudio(Port);
|
|
|
if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
|
|
{
|
|
|
//回复操作成功
|
|
|
HalSend_type1Send_Reply_Success(Port, FrameSequence);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//回复操作失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
}
|
|
|
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
|
|
}
|
...
|
...
|
@@ -1581,13 +1592,13 @@ static T_JZsdkReturnCode RecvDeal_Delete_Audio(int Port, char *getbuf) |
|
|
|
|
|
/*********
|
|
|
*
|
|
|
* 删除录音
|
|
|
* 删除pcm文件
|
|
|
*
|
|
|
*
|
|
|
**********/
|
|
|
static T_JZsdkReturnCode RecvDeal_Delete_VoiceRecord(int Port, char *getbuf)
|
|
|
{
|
|
|
JZSDK_LOG_INFO("%s,删除opus录音操作",JZsdk_DefineCode_GetPortName(Port));
|
|
|
JZSDK_LOG_INFO("%s,删除pcm文件操作",JZsdk_DefineCode_GetPortName(Port));
|
|
|
|
|
|
//获取帧的序列号
|
|
|
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
|
...
|
...
|
@@ -1603,7 +1614,7 @@ static T_JZsdkReturnCode RecvDeal_Delete_VoiceRecord(int Port, char *getbuf) |
|
|
|
|
|
//3、拼接指令
|
|
|
char FilePath[512];
|
|
|
snprintf(FilePath, 512 ,"/root/sdcard/opus/%s", FileName);
|
|
|
snprintf(FilePath, 512 ,"/root/sdcard/pcm/%s", FileName);
|
|
|
|
|
|
//4、删除文件
|
|
|
JZsdk_Osal_delete(FilePath);
|
...
|
...
|
@@ -1612,7 +1623,7 @@ static T_JZsdkReturnCode RecvDeal_Delete_VoiceRecord(int Port, char *getbuf) |
|
|
|
|
|
//4、刷新歌曲列表
|
|
|
#ifdef MEGAPHONE_CONFIG_STATUS_ON
|
|
|
OpusFile_FlushList();
|
|
|
PcmFile_FlushList();
|
|
|
#endif
|
|
|
|
|
|
//回复操作成功
|
...
|
...
|
@@ -1722,10 +1733,10 @@ static T_JZsdkReturnCode RecvDeal_Rename_VoiceRecord(int Port, char *getbuf) |
|
|
|
|
|
//3、拼接出地址
|
|
|
char OldFilePath[JZSDK_FILE_PATH_SIZE_MAX];
|
|
|
snprintf(OldFilePath, JZSDK_FILE_PATH_SIZE_MAX ,"/root/sdcard/opus/%s", OldFileName);
|
|
|
snprintf(OldFilePath, JZSDK_FILE_PATH_SIZE_MAX ,"/root/sdcard/pcm/%s", OldFileName);
|
|
|
|
|
|
char NewFilePath[JZSDK_FILE_PATH_SIZE_MAX];
|
|
|
snprintf(NewFilePath, JZSDK_FILE_PATH_SIZE_MAX ,"/root/sdcard/opus/%s", NewFileName);
|
|
|
snprintf(NewFilePath, JZSDK_FILE_PATH_SIZE_MAX ,"/root/sdcard/pcm/%s", NewFileName);
|
|
|
|
|
|
JZsdk_Osal_Rename(OldFilePath, NewFilePath);
|
|
|
|
...
|
...
|
@@ -1733,7 +1744,7 @@ static T_JZsdkReturnCode RecvDeal_Rename_VoiceRecord(int Port, char *getbuf) |
|
|
|
|
|
//4、刷新歌曲列表
|
|
|
#ifdef MEGAPHONE_CONFIG_STATUS_ON
|
|
|
OpusFile_FlushList();
|
|
|
PcmFile_FlushList();
|
|
|
#endif
|
|
|
|
|
|
//回复操作成功
|
...
|
...
|
@@ -2371,6 +2382,8 @@ static T_JZsdkReturnCode RecvDeal_OpusTrans_stop_and_check(int Port, char *getbu |
|
|
**********/
|
|
|
static T_JZsdkReturnCode RecvDeal_OpusPlay(int Port, char *getbuf)
|
|
|
{
|
|
|
T_JZsdkReturnCode ret;
|
|
|
|
|
|
JZSDK_LOG_INFO("%s,opus播放",JZsdk_DefineCode_GetPortName(Port));
|
|
|
|
|
|
//获取帧的序列号
|
...
|
...
|
@@ -2385,139 +2398,15 @@ static T_JZsdkReturnCode RecvDeal_OpusPlay(int Port, char *getbuf) |
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
}
|
|
|
|
|
|
//获取命令
|
|
|
int Mode = getbuf[9];
|
|
|
if (Mode == 0)
|
|
|
{
|
|
|
UIcontrol_Opus_PlayFixedFile(Port);
|
|
|
|
|
|
//回复操作成功
|
|
|
HalSend_type1Send_Reply_Success(Port, FrameSequence);
|
|
|
}
|
|
|
else if (Mode == 1)
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
|
|
}
|
|
|
|
|
|
/**********************************
|
|
|
*
|
|
|
* opus列表查询
|
|
|
*
|
|
|
*
|
|
|
* **********************************/
|
|
|
static T_JZsdkReturnCode RecvDeal_Get_OpusList(int Port, char *getbuf)
|
|
|
{
|
|
|
T_JZsdkReturnCode ret;
|
|
|
|
|
|
JZSDK_LOG_INFO("%s,opus列表查询",JZsdk_DefineCode_GetPortName(Port));
|
|
|
|
|
|
//获取帧的序列号
|
|
|
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
|
|
|
|
|
|
#ifdef MEGAPHONE_CONFIG_STATUS_ON
|
|
|
|
|
|
//刷新opus列表
|
|
|
OpusFile_FlushList();
|
|
|
|
|
|
//获取opus总数
|
|
|
int OpusFileCount = OpusFile_GetListNum();
|
|
|
|
|
|
//注册一个opus数组
|
|
|
unsigned char **MusicName = (unsigned char **)malloc(OpusFileCount * sizeof(unsigned char*));
|
|
|
if (MusicName == NULL)
|
|
|
{
|
|
|
//回复操作失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
}
|
|
|
|
|
|
//注册一个歌曲名字长度的数组
|
|
|
int *MusicNameLength = (int *)malloc(OpusFileCount * sizeof(int));
|
|
|
if (MusicNameLength == NULL)
|
|
|
{
|
|
|
free(MusicName);
|
|
|
//回复操作失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
}
|
|
|
|
|
|
//为每一首opus分配内存
|
|
|
for (int i = 0; i < OpusFileCount; i++)
|
|
|
{
|
|
|
MusicName[i] = (unsigned char*)malloc(128 * sizeof(unsigned char));
|
|
|
if (MusicName[i] == NULL)
|
|
|
{
|
|
|
// 内存分配失败,需要释放之前分配的内存
|
|
|
for (int j = 0; j < i; j++)
|
|
|
{
|
|
|
free(MusicName[j]);
|
|
|
}
|
|
|
free(MusicNameLength);
|
|
|
free(MusicName);
|
|
|
|
|
|
//回复操作失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
}
|
|
|
|
|
|
memset(MusicName[i], 0, 128 * sizeof(unsigned char));
|
|
|
|
|
|
//如果成功分配内存,则写入名字
|
|
|
Megaphone_OpusFile_GetAudioNameByIndex(i, MusicName[i], &MusicNameLength[i]);
|
|
|
}
|
|
|
|
|
|
JZSDK_LOG_DEBUG("opus列表取出完成");
|
|
|
|
|
|
//发送开始帧
|
|
|
ret = HalSend_type1Send_Send_OpusList_Start(Port, FrameSequence, OpusFileCount);
|
|
|
|
|
|
for (int i = 0; i < OpusFileCount; i++)
|
|
|
{
|
|
|
//获取歌曲详细信息
|
|
|
struct AudioMange_audio_struct AudioDetailMessage;
|
|
|
memset(&AudioDetailMessage, 0, sizeof(struct AudioMange_audio_struct));
|
|
|
ret = OpusFile_GetAudioInfo(MusicName[i], MusicNameLength[i],&AudioDetailMessage);
|
|
|
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
|
|
{
|
|
|
//回复操作失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
//发送opus列表
|
|
|
ret = HalSend_type1Send_Send_OpusList_Trans(Port, FrameSequence, AudioDetailMessage.FileName, AudioDetailMessage.FileNameLen, AudioDetailMessage.FileSize, AudioDetailMessage.Time);
|
|
|
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
|
|
{
|
|
|
//回复操作失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
|
|
|
continue;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//释放存储的数据
|
|
|
for (int i = 0; i < OpusFileCount; i++)
|
|
|
{
|
|
|
free(MusicName[i]);
|
|
|
}
|
|
|
|
|
|
free(MusicNameLength);
|
|
|
free(MusicName);
|
|
|
|
|
|
//发送结束帧
|
|
|
ret = HalSend_type1Send_Send_OpusList_Stop(Port, FrameSequence);
|
|
|
|
|
|
#else
|
|
|
JZSDK_LOG_ERROR("非喊话器不支持opus列表");
|
|
|
//回复操作失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
#endif
|
|
|
}
|
|
|
|
|
|
/*********
|
|
|
*
|
|
|
* 开启opus实时喊话 功能
|
...
|
...
|
@@ -2639,6 +2528,178 @@ static T_JZsdkReturnCode RecvDeal_Opus_RealTimeVoice_stop(int Port, char *getbuf |
|
|
|
|
|
/*******************************************************************************************************************************
|
|
|
*
|
|
|
* pcm部分
|
|
|
*
|
|
|
* *******************************************************************************************************************************/
|
|
|
|
|
|
/*********************************
|
|
|
*
|
|
|
* PCM播放
|
|
|
*
|
|
|
*
|
|
|
* **********************************/
|
|
|
static T_JZsdkReturnCode RecvDeal_PCM_Play(int Port, char *getbuf)
|
|
|
{
|
|
|
T_JZsdkReturnCode ret;
|
|
|
|
|
|
JZSDK_LOG_INFO("%s, PCM播放",JZsdk_DefineCode_GetPortName(Port));
|
|
|
|
|
|
//获取帧的序列号
|
|
|
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
|
|
|
|
|
|
//分析pcm文件名
|
|
|
unsigned char PcmName[128];
|
|
|
unsigned int PcmNameLen = JZsdk_Get_FrameLength(getbuf) - 9 - 2;
|
|
|
if (PcmNameLen > 128)
|
|
|
{
|
|
|
//回复操作失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
}
|
|
|
|
|
|
memset(PcmName, 0, sizeof(PcmName));
|
|
|
memcpy(PcmName, &getbuf[10], PcmNameLen);
|
|
|
|
|
|
ret = UIcontrol_Pcm_PlayListFile(Port, PcmName, PcmNameLen);
|
|
|
if (ret == JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
|
|
{
|
|
|
//回复操作成功
|
|
|
HalSend_type1Send_Reply_Success(Port, FrameSequence);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
//回复操作失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
}
|
|
|
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS;
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**********************************
|
|
|
*
|
|
|
* pcm列表查询
|
|
|
*
|
|
|
*
|
|
|
* **********************************/
|
|
|
static T_JZsdkReturnCode RecvDeal_Get_PcmList(int Port, char *getbuf)
|
|
|
{
|
|
|
T_JZsdkReturnCode ret;
|
|
|
|
|
|
JZSDK_LOG_INFO("%s,pcm列表查询",JZsdk_DefineCode_GetPortName(Port));
|
|
|
|
|
|
//获取帧的序列号
|
|
|
int FrameSequence = JZsdk_Get_FrameSequence(getbuf);
|
|
|
|
|
|
#ifdef MEGAPHONE_CONFIG_STATUS_ON
|
|
|
|
|
|
//刷新pcm列表
|
|
|
PcmFile_FlushList();
|
|
|
|
|
|
//获取opus总数
|
|
|
int PcmFileCount = PcmFile_GetListNum();
|
|
|
|
|
|
//注册一个opus数组
|
|
|
unsigned char **MusicName = (unsigned char **)malloc(PcmFileCount * sizeof(unsigned char*));
|
|
|
if (MusicName == NULL)
|
|
|
{
|
|
|
//回复操作失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
}
|
|
|
|
|
|
//注册一个歌曲名字长度的数组
|
|
|
int *MusicNameLength = (int *)malloc(PcmFileCount * sizeof(int));
|
|
|
if (MusicNameLength == NULL)
|
|
|
{
|
|
|
free(MusicName);
|
|
|
//回复操作失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
}
|
|
|
|
|
|
//为每一首opus分配内存
|
|
|
for (int i = 0; i < PcmFileCount; i++)
|
|
|
{
|
|
|
MusicName[i] = (unsigned char*)malloc(128 * sizeof(unsigned char));
|
|
|
if (MusicName[i] == NULL)
|
|
|
{
|
|
|
// 内存分配失败,需要释放之前分配的内存
|
|
|
for (int j = 0; j < i; j++)
|
|
|
{
|
|
|
free(MusicName[j]);
|
|
|
}
|
|
|
free(MusicNameLength);
|
|
|
free(MusicName);
|
|
|
|
|
|
//回复操作失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
return JZ_ERROR_SYSTEM_MODULE_CODE_FAILURE;
|
|
|
}
|
|
|
|
|
|
memset(MusicName[i], 0, 128 * sizeof(unsigned char));
|
|
|
|
|
|
//如果成功分配内存,则写入名字
|
|
|
Megaphone_PcmFile_GetAudioNameByIndex(i, MusicName[i], &MusicNameLength[i]);
|
|
|
}
|
|
|
|
|
|
JZSDK_LOG_DEBUG("pcm列表取出完成");
|
|
|
|
|
|
//发送开始帧
|
|
|
ret = HalSend_type1Send_Send_OpusList_Start(Port, FrameSequence, PcmFileCount);
|
|
|
|
|
|
for (int i = 0; i < PcmFileCount; i++)
|
|
|
{
|
|
|
//获取歌曲详细信息
|
|
|
struct AudioMange_audio_struct AudioDetailMessage;
|
|
|
memset(&AudioDetailMessage, 0, sizeof(struct AudioMange_audio_struct));
|
|
|
ret = PcmFile_GetAudioInfo(MusicName[i], MusicNameLength[i],&AudioDetailMessage);
|
|
|
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
|
|
{
|
|
|
//回复操作失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
//发送opus列表
|
|
|
ret = HalSend_type1Send_Send_OpusList_Trans(Port, FrameSequence, AudioDetailMessage.FileName, AudioDetailMessage.FileNameLen, AudioDetailMessage.FileSize, AudioDetailMessage.Time);
|
|
|
if (ret != JZ_ERROR_SYSTEM_MODULE_CODE_SUCCESS)
|
|
|
{
|
|
|
//回复操作失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
|
|
|
continue;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
//释放存储的数据
|
|
|
for (int i = 0; i < PcmFileCount; i++)
|
|
|
{
|
|
|
free(MusicName[i]);
|
|
|
}
|
|
|
|
|
|
free(MusicNameLength);
|
|
|
free(MusicName);
|
|
|
|
|
|
//发送结束帧
|
|
|
ret = HalSend_type1Send_Send_OpusList_Stop(Port, FrameSequence);
|
|
|
|
|
|
#else
|
|
|
JZSDK_LOG_ERROR("非喊话器不支持pcm列表");
|
|
|
//回复操作失败
|
|
|
HalSend_type1Send_Reply_Failure(Port, FrameSequence);
|
|
|
#endif
|
|
|
}
|
|
|
|
|
|
|
|
|
/*******************************************************************************************************************************
|
|
|
*
|
|
|
* 云台部分
|
|
|
*
|
|
|
* *******************************************************************************************************************************/
|
...
|
...
|
@@ -4511,12 +4572,6 @@ static T_JZsdkReturnCode RecvDeal_InstructInput(int Port, int Receive_mode, unsi |
|
|
return 0;
|
|
|
break;
|
|
|
|
|
|
//获取opus列表
|
|
|
case JZ_INSCODE_5AFRAME_OPUS_GETOPUSLIST:
|
|
|
RecvDeal_Get_OpusList(Port,getbuf);
|
|
|
return 0;
|
|
|
break;
|
|
|
|
|
|
//开启opus实时喊话
|
|
|
case JZ_INSCODE_5AFRAME_OPUS_REALTIMEVOICE_START:
|
|
|
RecvDeal_Opus_RealTimeVoice_start(Port,getbuf);
|
...
|
...
|
@@ -4535,6 +4590,18 @@ static T_JZsdkReturnCode RecvDeal_InstructInput(int Port, int Receive_mode, unsi |
|
|
return 0;
|
|
|
break;
|
|
|
|
|
|
//PCM播放
|
|
|
case JZ_INSCODE_5AFRAME_PCM_PLAY:
|
|
|
RecvDeal_PCM_Play(Port,getbuf);
|
|
|
return 0;
|
|
|
break;
|
|
|
|
|
|
//获取Pcm列表
|
|
|
case JZ_INSCODE_5AFRAME_PCM_GETPCMLIST:
|
|
|
RecvDeal_Get_PcmList(Port,getbuf);
|
|
|
return 0;
|
|
|
break;
|
|
|
|
|
|
//云台控制
|
|
|
case JZ_INSCODE_5AFRAME_GIMBAL_PITCH_CONTROL:
|
|
|
RecvDeal_Gimbal_PitchControl(Port,getbuf);
|
...
|
...
|
|