📄 mrecord.c
字号:
/******************************************************
Copyright(C)2007,Rockchip Co., Ltd. All Rights Reserved.
File:mRECORD.c
Desc:完成模块录音的相关处理接口函数
Note:
Author:fsh
$Log: mRECORD.c,v $
Revision 1.4 2008/07/09 14:25:04 DDL
增加对camera模块的支持 由宏ROCK_CAMRA隔离
dengdl
Revision 1.3 2008/06/19 04:42:24 Administrator
代码整理!
Revision 1.2 2008/05/24 02:39:39 Administrator
原录音文件冲数据的BUG没有更新,现更新上去!
Revision 1.1.1.1 2008/05/07 04:14:50 Administrator
no message
Revision 1.2 2008/03/07 09:28:29 Hanjiang
no message
Revision 1.18 2008/01/10 09:25:29 Lingzhaojun
发布0110版本
Revision 1.17 2008/01/09 06:59:35 Lingzhaojun
提交APE
Revision 1.16 2008/01/08 13:33:42 Lingzhaojun
合并蓝魔970代码
Revision 1.14 2007/12/26 01:52:55 Huangzufang
录音修改提交
Revision 1.13 2007/12/24 07:54:37 Lingzhaojun
同步蓝魔版本基本模块
Revision 1.2 2007/12/21 10:06:51 Lingzhaojun
蓝魔二合一初步
Revision 1.1.1.1 2007/12/21 02:33:32 Lingzhaojun
12.21
Revision 1.3 2007/12/14 15:05:34 Hanjiang
rm972 pp后的版本上传
Revision 1.2 2007/12/13 12:44:35 Caifeng
no message
Revision 1.1.1.1 2007/12/11 14:18:09 cvsadmin
no message
Revision 1.3 2007/12/06 06:50:16 Xiexiuxin
Fm自动录音
Revision 1.2 2007/12/04 13:36:50 Fangzhenfu
新 SDK 整合完后上传!!!
Revision 1.1.1.1 2007/12/01 01:29:00 Lingzhaojun
no message
Revision 1.9 2007/11/22 02:10:36 Huangzufang
录音文件不能播放修改
Revision 1.8 2007/11/21 08:52:52 Huangzufang
录音提交
Revision 1.7 2007/11/08 09:07:15 Fangsaihong
no message
Revision 1.6 2007/11/02 00:52:53 Fangsaihong
录音模块修改
Revision 1.5 2007/10/30 10:16:19 Hanjiang
no message
Revision 1.3 2007/10/24 07:05:21 Hanjiang
no message
Revision 1.0 2007/08/30 fsh
******************************************************/
/****************************************************************************/
#include "include.h"
#include "../include/audio_main.h"
#include "../include/audio_globals.h"
#include "mTrackControl.h"
#include "../include/commoncmd.h"
#include "../mp3enc/MP3enc.H"
#include "mRECORD.H"
void Audio_RecISR(void);
unsigned long gBitrate; // Bit Rate for recording
unsigned int gSamplingFreq; // Sampling Frequency for recording
unsigned char gMpegMode; // Mpeg Mode for recording
unsigned char gChannel; // Channel for recording
unsigned char REC_Flag; // flag to store updating status for recording
unsigned long CurrRecordTime; // Total current recording time as second
unsigned long FreeSize; // Total Free Size in disk as kbytes
unsigned long TotalSize; // Total Disk Size as kbytes
unsigned long RemainTime; // Remain Time for recording
unsigned char CurRecInput; // Current Recording Input like line-in, Voice, FM
#ifdef RADIO_REC_INCLUDE
unsigned char PrevRecInput; // Previous Recording Input like line-in, Voice, FM
#endif
unsigned char MenuRecMode; // Recording Mode according to Bitrate
unsigned char RecFileName[REC_FILE_NAME_SIZE+1]; // Recording File Name
unsigned int thePresentCodec; //[1]PCM [2]ADPCM [3]MP3
#define REC_WRITE_BUF_NUM 2
#ifdef PCM_ENC_INCLUDE
short RecordWriteBuf[REC_WRITE_BUF_NUM*REC_WRITE_BUF_LEN];
#endif
#if defined(MP3_ENC_INCLUDE)||defined(ADPCM_ENC_INCLUDE)
char RecordWriteBuf[REC_WRITE_BUF_NUM*REC_WRITE_BUF_LEN];
#endif
unsigned long RecordWriteIndex = 0;
unsigned char SendFirstBufSign = 0;
unsigned char SendSecondBufSign = 0;
#if ROCK_CAMERA
char * pCurDvAudioOutputBuf;
int curDvAudioOutputBufLen;
#endif
extern unsigned char REC_Error_Flag;
extern unsigned char REC_SaveFlag;
/******************************************************
Name: REC_InitVariable
Desc: 录音前的数据变量初始化
Param:
Return:
Global:
Note:
Author:fsh
Log:
******************************************************/
void REC_InitVariable(void)
{
CurrRecordTime = 0;
FreeSize = 0;
RemainTime = 0;
TotalSize = 0;
//CurRecInput = 0;
REC_Flag = RECORD_PREPARE;
#ifdef PCM_ENC_INCLUDE
gBitrate = 128;
gSamplingFreq = 8000;
gMpegMode = 1;
gChannel = 1;
MenuRecMode = PCM_REC_SETTING_128;
thePresentCodec = 1;
#elif defined(ADPCM_ENC_INCLUDE)
gBitrate = 32;
gSamplingFreq = 8000;
gMpegMode = 1;
gChannel = 1;
MenuRecMode = ADPCM_REC_SETTING_32;
thePresentCodec = 2;
#elif defined(MP3_ENC_INCLUDE)
gBitrate = 16;
gSamplingFreq = 16000;
gMpegMode = 0;
gChannel = 1;
MenuRecMode = MP3_REC_SETTING_16;
thePresentCodec = 3;
#endif
}
///////////////////////////////////////////////////////////////////////////////////////////
/******************************************************
Name: REC_GetCurrCodec()
Desc: Get the current codec ;//[1]PCM [2]ADPCM [3]MP3
Param:
Return: Current Codec
Global:
Note:
Author:fsh
Log:
******************************************************/
unsigned int REC_GetCurrCodec(void)
{
return thePresentCodec;
}
/******************************************************
Name: REC_GetCurrRecMode(void)
Desc: getting the record mode.example :PCM_REC_SETTING_128
Param:
Return: getting the Menu recorder Mode
Global:
Note:
Author:fsh
Log:
******************************************************/
unsigned char REC_GetCurrRecMode(void)
{
return MenuRecMode;
}
/******************************************************
Name: REC_SetRecMode(unsigned char ucMode)
Desc: Setting the recorder mode.example :PCM_REC_SETTING_128
Param:
Return: setting the Menu record Mode
Global:
Note:
Author:fsh
Log:
******************************************************/
void REC_SetRecMode(unsigned char ucMode)
{
MenuRecMode = ucMode;
}
/******************************************************
Name: REC_GetRemainTime(void)
Desc: Getting remain time about recorder.
Param:
Return: RemainTime
Global:
Note:
Author:fsh
Log:
******************************************************/
unsigned long REC_GetRemainTime(unsigned char getfreesize)
{
unsigned long long recFreeSize;//M
unsigned long compensationTime;
if (getfreesize)
{
FreeSize = FS_GetFreeMem("D:\\");
}
if ((long)(FreeSize - MIN_SIZE_FOR_RECORD) <= 0)
{
recFreeSize = 0;
}
else
{
recFreeSize = (FreeSize - MIN_SIZE_FOR_RECORD);
}
RemainTime = 0;
if (recFreeSize > 0)
{
RemainTime = ((recFreeSize) << 13) / ((gBitrate * 1000));
compensationTime = ((recFreeSize) << 13) % ((gBitrate * 1000));// * 8 *1024
if (compensationTime)
RemainTime++;
}
return RemainTime;//sec
}
/******************************************************
Name: REC_GetFreeSize(void)
Desc: how many free size for recorder .
Param:
Return: FreeSize
Global:
Note:
Author:fsh
Log:
******************************************************/
unsigned long REC_GetFreeSize(void)
{
return FreeSize;
}
/******************************************************
Name: REC_UpdateDiskSize()
Desc:
Param:
Return:
Global:
Note:
Author:fsh
Log:
******************************************************/
void REC_UpdateDiskSize()
{
//return FreeSize;
}
/******************************************************
Name: REC_GetCurrRecInput(void)
Desc: RK27XX has three recorder Mode for Input.
LINEIN_REC,VOICE_REC,FM_REC
Param:
Return:
Global:
Note:
Author:fsh
Log:
******************************************************/
unsigned char REC_GetCurrRecInput(void)
{
return CurRecInput;
}
/******************************************************
Name: REC_SetCurrRecInput(unsigned char)
Desc: Setting the Input Mode.
LINEIN_REC,VOICE_REC,FM_REC
Param:
Return: NULL
Global:
Note:
Author: fsh
Log:
******************************************************/
void REC_SetCurrRecInput(unsigned char ucRecInput)
{
CurRecInput = ucRecInput;
}
/*****************************************************
Name: REC_GetCurrRecordingSec(void)
Desc: Getting the current recordTime.
Param:
Return:
Global:
Note:
Author: fsh
Log:
******************************************************/
unsigned long REC_GetCurrRecordingSec(void)
{
return CurrRecordTime;
}
unsigned long REC_GetTotalTime(void)
{
return RemainTime;
}
/*****************************************************
Name: REC_SetCurrRecordingSec(void)
Desc: Updata the new recordTime.
Param:
Return:
Global:
Note:
Author: fsh
Log:
******************************************************/
void REC_SetCurrRecordingSec(unsigned long usNewRecordTime)
{
CurrRecordTime = usNewRecordTime;
}
/*****************************************************
Name: REC_GetMinRecordTime(void)
Desc: Getting the min times for recorder.//now it is buffer size.
Param:
Return:
Global:
Note:
Author: fsh
Log:
******************************************************/
unsigned int REC_GetMinRecordTime(void)
{
return MIN_SIZE_FOR_RECORD;
}
/*****************************************************
Name: REC_GetRecFileName(void)
Desc: return the recorder name .
Param:
Return:
Global:
Note:
Author: fsh
Log:
******************************************************/
unsigned char* REC_GetRecFileName(void)
{
return RecFileName;
}
/*****************************************************
Name: REC_GetRecFileNameSize(void)
Desc: return the name size .
Param:
Return:
Global:
Note:
Author: fsh
Log:
******************************************************/
unsigned int REC_GetRecFileNameSize(void)
{
return REC_FILE_NAME_SIZE;
}
/*****************************************************
Name: REC_GetgBitrate(void)
Desc: Getting the Bitrate of recorder.
Param:
Return:
Global:
Note:
Author: fsh
Log:
******************************************************/
unsigned long REC_GetgBitrate(void)
{
return (unsigned long)gBitrate;
}
/*****************************************************
Name: REC_GetSamplingFreq(void)
Desc: Getting the Sample rate of recorder.
Param:
Return:
Global:
Note:
Author: fsh
Log:
******************************************************/
unsigned int REC_GetSamplingFreq(void)
{
return gSamplingFreq;
}
/*****************************************************
Name: REC_GetChannel(void)
Desc: Getting the Channel of recorder.
Param:
Return:
Global:
Note:
Author: fsh
Log:
******************************************************/
unsigned char REC_GetChannel(void)
{
return gChannel;
}
/*****************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -