📄 .#recorder.c.1.2
字号:
//#ifdef __RECORD_
#include "Recorder.h"
#include "device.h"
#include "my_os_q.h"
#include "task_cfg.h"
#include "Recorder_api.h"
void __Recorder_Exceptions(recorder_t *g_recorder_vars, int errtype);
int Recorder_CheckFileName(recorder_t *g_recorder_vars);
void Recorder_InitContrlParm(recorder_t *g_recorder_vars);
bool RecorderDetect();
void RecorderEngine()
{
int result;
INT8U err;
recorder_t g_recorder_vars;
msg_t QStart_In[10];
msg_t QStart_Out[10];
char recDataBuffer[513];
char recADBuffer[1728]; //144*3*2*2
msg_t msg;
msg_t msg_send;
memset(&g_recorder_vars, 0x00, sizeof(recorder_t));
Recorder_InitContrlParm( &g_recorder_vars );
g_recorder_vars.rec_bitstream.bit_stream = recDataBuffer;
g_recorder_vars.rec_bitstream.pcm_stream = recADBuffer;
Recorder_In = MYOSQCreate(QStart_In, 10);
if( Recorder_Out == 0 )
{
Recorder_Out = MYOSQCreate(QStart_Out, 10);
}
OSSetTaskOwnPtr( (unsigned int *)&g_recorder_vars, RECORDER_ENGINE_ID);
output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08);
Music_Recode_Open(&g_recorder_vars.rec_bitstream, Recorder_In);
do
{
MYOSQPend(Recorder_In,&msg, 0);
switch(msg.type)
{
// case MS_SetLocation:
// if( (result = Recorder_CheckFileName(&g_recorder_vars)) != MS_Recorder_NoErr)
// {
// __Recorder_Exceptions(&g_recorder_vars,result);
// break;
// }
// FS_FWrite(g_recorder_vars.rec_bitstream.bit_stream, 512, g_recorder_vars.fp);
// g_recorder_vars.recorder_info.status = record_wait;
// break;
// 开始录音或继续录音
case MS_Play:
if(g_recorder_vars.recorder_info.status <= record_stop)
{
if( (result = Recorder_CheckFileName(&g_recorder_vars)) != MS_Recorder_NoErr)
{
__Recorder_Exceptions(&g_recorder_vars,result);
break;
}
// FS_FWrite(g_recorder_vars.rec_bitstream.bit_stream, 512, g_recorder_vars.fp);
if( Music_Recode_Play(&g_recorder_vars.rec_control_info) != TRUE)
{
result = MS_Recorder_DSPErr;
__Recorder_Exceptions(&g_recorder_vars,result);
}
g_recorder_vars.recorder_info.status = record_recording;
}
/*
else if(g_recorder_vars.recorder_info.status == record_wait)
{ //开始录音
if( Music_Recode_Play(&g_recorder_vars.rec_control_info) != TRUE)
{
result = MS_Recorder_DSPErr;
__Recorder_Exceptions(&g_recorder_vars,result);
}
g_recorder_vars.recorder_info.status = record_recording;
}
*/
else if(g_recorder_vars.recorder_info.status == record_pause)// 继续录音
{
g_recorder_vars.recorder_info.status = record_recording;
Music_Recode_Continue();
}
else if(g_recorder_vars.recorder_info.status == record_recording) //暂停录音
{
g_recorder_vars.recorder_info.status = record_pause;
Music_Recode_Pause();
}
else
{
__Recorder_Exceptions(&g_recorder_vars,MS_Recorder_StatusErr);
}
break;
case MS_Stop:
g_recorder_vars.recorder_info.status = record_unvalid;
Music_Recode_stopplay();
break;
case MS_Write:
FS_FWrite((FS_u32)g_recorder_vars.rec_bitstream.bit_stream, 512, g_recorder_vars.fp);
break;
case MS_DSPExit:
g_recorder_vars.recorder_info.status = record_stop;
if(g_recorder_vars.fp != NULL)
{
FS_FClose(g_recorder_vars.fp);
g_recorder_vars.fp = NULL;
}
break;
case MS_DSP_Err:
g_recorder_vars.recorder_info.status = record_err;
if(g_recorder_vars.fp != NULL)
{
FS_FClose(g_recorder_vars.fp);
g_recorder_vars.fp = NULL;
}
break;
case MS_GetTime:
Get_CurrentTime(&g_recorder_vars.recorder_info.current_time);
msg_send.type = MS_RECORDER;
msg_send.msg.data[0] = MS_RedrawInfo;
MYOSQPost(Recorder_Out,&msg_send);
break;
/*
case MS_SETGAIN:// 设置 输入音量的增益
case MS_SETVOR:// 设置 分曲模式
case MS_RECODEMODE:// 设置录音模式
case MS_SETSOURCE:// 设置 resource_t
case MS_SETAUDIOFMT: // 设置 audio_format_t
case MS_GETAUDIOFMT: // 获取 audio_format_t
break;
*/
case MS_END:
if(g_recorder_vars.recorder_info.status >= record_pause)
{
Music_Recode_stopplay();
}
else if(g_recorder_vars.recorder_info.status >= record_wait)
{
if(g_recorder_vars.fp != NULL)
{
FS_FClose(g_recorder_vars.fp);
g_recorder_vars.fp = NULL;
}
}
g_recorder_vars.recorder_info.status = record_exit;
break;
default:
__Recorder_Exceptions(&g_recorder_vars,MS_Recorder_UndefineErr);
}
}while(g_recorder_vars.recorder_info.status != record_exit);
if( !Music_Recode_Close())
__Recorder_Exceptions(&g_recorder_vars,MS_Recorder_ReleaseErr);
OS_ENTER_CRITICAL();
Recorder_In = MYOSQDel(Recorder_In, OS_DEL_ALWAYS, &err);
Recorder_Out = MYOSQDel(Recorder_Out, OS_DEL_ALWAYS, &err);
Recorder_In = 0;
Recorder_Out = 0;
OS_EXIT_CRITICAL();
while(1)
{
output8(REG4E_RTC_WATCH_DOG, input8(REG4E_RTC_WATCH_DOG) | 0x08);
OSTaskDel(OS_PRIO_SELF);
}
}
void __Recorder_Exceptions(recorder_t *g_recorder_vars, int errtype)
{
msg_t msg_send;
msg_send.type = MS_RECORDER;
msg_send.msg.data[0] = errtype;
MYOSQPost(Recorder_Out,&msg_send);
}
void Recorder_InitContrlParm(recorder_t *g_recorder_vars)
{
g_recorder_vars->rec_control_info.source = source_phone;
g_recorder_vars->rec_control_info.rec_type = REC_AG8;
g_recorder_vars->rec_control_info.FsIndex =_FS_8K;
g_recorder_vars->rec_control_info.BTIndex = 32;
g_recorder_vars->rec_control_info.EncodeMode = STEREO;
g_recorder_vars->rec_control_info.ChannelNum = DUAL_CH;
g_recorder_vars->rec_control_info.gain = DB_0P0;
g_recorder_vars->recorder_info.status = record_stop;
g_recorder_vars->recorder_dir[0] = '\\';
}
/*******************************************************************************
* Function: Recorder_CheckFileName
* Description: 检查文件是否存在,不存在,创建该文件.
* Input:
* Output:
* Other: 对应 MS_LOAD
*******************************************************************************/
int Recorder_CheckFileName(recorder_t *g_recorder_vars)
{
char filename[78];
if(g_recorder_vars->fp != NULL)
{
FS_FClose(g_recorder_vars->fp);
}
strcpy(filename,g_recorder_vars->recorder_dir);
strcat(filename,g_recorder_vars->recorder_filename);
g_recorder_vars->fp = FS_FOpen(filename, "rb");
if((g_recorder_vars->fp != NULL) && (g_recorder_vars->recorder_info.status != record_wait))
{
return MS_Recorder_FileExistErr;
}
g_recorder_vars->fp = FS_FOpen(filename, "wb");
if(g_recorder_vars->fp == NULL)
{
return MS_Recorder_FSErr;
}
return MS_Recorder_NoErr;
}
//#endif /*__RECORD_*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -