工作中常常要在程序中,用指令开启 读文件测试 或 写文件测试,比如说读指定文件数据用于播放,或将采集数据保存下来!
// 读文件
void ReadPcm(u8* pBuf, u32 dwSize)
{
static FILE* pf = NULL;
//=============================================
if (pBuf == NULL || dwSize == 0)
{
SAFE_FCLOSE(pf);
return;
}
//=============================================
if (pf == NULL)
{
pf = fopen("/data/test0.pcm", "rb");
if (pf == NULL)
{
CodecPrint("fopen( /data/test0.pcm ) fail\n\r");
return;
}
}
//=============================================
fread(pBuf, 1, dwSize, pf);
if (feof(pf))
{
fseek(pf, 0, SEEK_SET);//文件位置指针回复到开始位置,丢弃文件末尾不足一帧的数据
fread(pBuf, 1, dwSize, pf);
}
}
//=============================================
//循环读文件数据 给播放
int main()
{
while(1)
{
memset(tPly.pAudData, 0, tPly.dwDataLen);
if (g_dwEpLogonMask == 6)
{
ReadPcm(tPly.pAudData, tPly.dwDataLen);//读文件数据
}
else
{
ReadPcm(NULL, 0);//结束读文件
}
DealAudPly(tPlyHost.pAudData, tPlyHost.dwDataLen);
}
return 0;
}
//写文件
u32 WriteToFile(u8* pData, u32 dwSize)
{
static FILE* pf = NULL;
//=============================================
if (pData == NULL || dwSize == 0)
{
//SAFE_FCLOSE(pf);
if (NULL != pf)
{
fclose(pf);
pf = NULL;
MPrintf("/data/local/tmp/test.pcm --- end\n\r");
}
return 0;
}
//=============================================
if (pf == NULL)
{
pf = fopen("/data/local/tmp/test.pcm", "wb");
if (pf == NULL)
{
MError("fopen( /data/local/tmp/test.pcm ) fail\n\r");
return 1;
}
MPrintf("/data/local/tmp/test.pcm --- start\n\r");
}
//=============================================
fwrite(pData, 1, dwSize, pf);
return 0;
}
//=============================================
//保存采集数据到文件
int main()
{
while(1)
{
DealAudCap(tCap.pAudData, tCap.dwDataLen);
if (g_dwLogonMask == 459)
{
WriteToFile(tCap.pAudData, tCap.dwDataLen);//保存采集数据
}
else if (g_dwLogonMask == 0)
{
WriteToFile(NULL, 0);//结束保存
}
}
return 0;
}