📄 cutamr.c
字号:
#include <string.h>
#include "CutAmr.h"
#define NWAVBUFLENG 1000000
unsigned char outBuf[NWAVBUFLENG];
int CutAmrNB(char *szAmrName, char *szSubAmrName, unsigned long int nStartTime, unsigned long int nEndTime)
{
unsigned int nFrameLeng ;//每帧包含的字节数
long int nByteLeng ,nStartPoint;
char magic[8];
short block_size[16]={ 12, 13, 15, 17, 19, 20, 26, 31, 5, 0, 0, 0, 0, 0, 0, 0 };
unsigned char analysis[32];
FILE *fAmr = fopen(szAmrName,"rb");
FILE *fSubAmr = fopen(szSubAmrName,"wb");
if ((!fAmr)||(!fSubAmr))
return -1;
fread( magic, sizeof( char ), strlen( AMR_MAGIC_NUMBER ), fAmr );
//判断文件的格式
if ( strncmp( magic, AMR_MAGIC_NUMBER, strlen( AMR_MAGIC_NUMBER ) ) )
{
fclose( fAmr );
fclose( fSubAmr );
return 1;
}
nStartTime /=20;
nEndTime /=20;
nStartTime *=20;
nEndTime *=20;
if(nStartTime<0 || nStartTime>=nEndTime) return 3;
//Start Cut
fseek(fAmr,0,SEEK_SET);
fread(outBuf,1,strlen( AMR_MAGIC_NUMBER ),fAmr);
fread(analysis, sizeof (unsigned char), 1, fAmr );
nFrameLeng = ((analysis[0] >> 3) & 0x000F) ;
nFrameLeng = block_size[nFrameLeng]+1;
nByteLeng = (nEndTime - nStartTime ) * nFrameLeng / 20 ;
nStartPoint = nFrameLeng * nStartTime / 20 ;
fseek(fAmr,nStartPoint + strlen( AMR_MAGIC_NUMBER ),SEEK_SET);
fread(outBuf+6,1,nByteLeng,fAmr);
if(!fwrite(outBuf, 1, nByteLeng + strlen( AMR_MAGIC_NUMBER ), fSubAmr))
return 2;
fclose(fAmr);
fclose(fSubAmr);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -