⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cutamr.c

📁 arena SDK开发应用
💻 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 + -