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

📄 mp4auenc.c

📁 语音压缩算法
💻 C
📖 第 1 页 / 共 3 页
字号:
      /* numSample is for internal purposes only ...   HP 970630 */      if (numSample !=frameNumSample)	break;      if (downsamplFac!=0 && lowpassFilt!=NULL){	firLowPass(sampleBuf[MONO_CHAN],tmpBuff, numSample, lowpassFilt );	subSampl(tmpBuff,sampleBuf[MONO_CHAN],downsamplFac,&numSample);      }      EncG729Frame(sampleBuf,		  startupFrame ? (BsBitBuffer*)NULL : bitBuf,		  startupFrame ? 0 : frameAvailNumBit,		  frameNumBit,frameMaxNumBit,numSample);      break;    case MODE_G723:      /* I'd suggest just to use frameNumSample! */      /* numSample is for internal purposes only ...   HP 970630 */      if (numSample !=frameNumSample)	break;      if (downsamplFac!=0 && lowpassFilt!=NULL){	firLowPass(sampleBuf[MONO_CHAN],tmpBuff, numSample, lowpassFilt );	subSampl(tmpBuff,sampleBuf[MONO_CHAN],downsamplFac,&numSample);      }      EncG723Frame(sampleBuf,		  startupFrame ? (BsBitBuffer*)NULL : bitBuf,		  startupFrame ? 0 : frameAvailNumBit,		  frameNumBit,frameMaxNumBit,numSample);      break;    case MODE_TF:      EncTfFrame(sampleBuf,		 startupFrame ? (BsBitBuffer*)NULL : bitBuf,		 startupFrame ? 0 : frameAvailNumBit,		 frameNumBit,frameMaxNumBit,bitRateLong,fSampleLong,		 frameData, &tfData, &nttData);      break;    }    if (!startupFrame) {      usedNumBit = BsBufferNumBit(bitBuf);      if (mainDebugLevel >= 5)	printf("usedNumBit=%d\n",usedNumBit);      /* write bit stream */      if (usedNumBit > frameAvailNumBit)	CommonExit(1,"Encode: more bits used than available in frame+buffer");      if (BsPutBuffer(bitStream,bitBuf))	CommonExit(1,"Encode: error writing bit stream data");      frameAvailNumBit -= usedNumBit;      if (frameData==NULL){	/* write padding bits */	padNumBit = 0;	if (frameAvailNumBit-frameNumBit+frameMinNumBit > bitReservSize) {	  padNumBit = frameAvailNumBit-frameNumBit+	    frameMinNumBit-bitReservSize;	  	  if (mainDebugLevel >= 5)	    printf("padNumBit=%d\n",padNumBit);	  	  for (i=0; i<padNumBit; i++)	    if (BsPutBit(bitStream,0,1))	      CommonExit(1,"Encode: error writing bit stream padding bits");	  frameAvailNumBit -= padNumBit;	  totPadNumBit += padNumBit;        }      }      if (minUsedNumBit > usedNumBit)	minUsedNumBit = usedNumBit;      if (maxUsedNumBit < usedNumBit)	maxUsedNumBit = usedNumBit;      if (minPadNumBit > padNumBit)	minPadNumBit = padNumBit;      if (maxPadNumBit < padNumBit)	maxPadNumBit = padNumBit;      if (minReservNumBit > frameAvailNumBit)	minReservNumBit = frameAvailNumBit;      if (maxReservNumBit < frameAvailNumBit)	maxReservNumBit = frameAvailNumBit;      totReservNumBit += frameAvailNumBit;        }    frame++;  } while (encNumSample < 0 || frame*(long)frameNumSample < encNumSample);  if (mainDebugLevel == 1)    fprintf(stderr," \n");  if (mainDebugLevel >= 2 && mainDebugLevel <= 3)    printf(" \n");  totDataNumBit = BsCurrentBit(bitStream)-headerNumBit-totPadNumBit;  if (mainDebugLevel >= 3) {    printf("totNumFrame=%d\n",frame);    printf("encNumSample=%ld  (%.3f sec  %.3f frames)\n",	   encNumSample,encNumSample/fSample,	   encNumSample/(float)frameNumSample);    printf("totNumSample=%ld\n",totNumSample);    printf("totNumBit=%ld\n",BsCurrentBit(bitStream));    printf("totDataNumBit=%ld  (%.3f bit/frame  %.3f bit/sec)\n",	   totDataNumBit,totDataNumBit/(float)frame,	   totDataNumBit/(float)frame*fSample/frameNumSample);    printf("totPadNumBit=%ld\n",totPadNumBit);    printf("lastPadNumBit=%d\n",frameAvailNumBit);    printf("minUsedNumBit=%d\n",minUsedNumBit);    printf("maxUsedNumBit=%d\n",maxUsedNumBit);    printf("minPadNumBit=%d\n",minPadNumBit);    printf("maxPadNumBit=%d\n",maxPadNumBit);    printf("minReservNumBit=%d\n",minReservNumBit);    printf("maxReservNumBit=%d\n",maxReservNumBit);    printf("avgReservNumBit=%.1f\n",totReservNumBit/(float)frame);  }  /* free encoder memory */  switch (mode) {  case MODE_PAR:    EncParFree();    break;  case MODE_HVXC:    EncHvxcFree();    break;  case MODE_LPC:    EncLpcFree();    break;  case MODE_TF:    EncTfFree();    break;  }  /* close audio file */  AudioClose(audioFile);    /* close bit stream file */  if (BsClose(bitStream))    CommonExit(1,"Encode: error closing bit stream file");  /* free buffers */  if (numChannel>1)    for (ch=0; ch<numChannel; ch++)      free(sampleBuf[ch]);  free(sampleBuf);  free(tmpBuff);  BsFreeBuffer(bitBuf);  return 0;}/* ---------- main ---------- */int main (int argc, char *argv[]){  char *progName = "<no program name>";  int result;  char oriFileName[STRLEN],bitFileName[STRLEN];  char infoDate[STRLEN];  int i,j,len;  int fileIdx;  char *info,*infoTail;  time_t curTime;  /* evaluate command line  */  CmdLineInit(0);  result = CmdLineEval(argc,argv,paraList,switchList,1,&progName);  if (result) {    if (result==1) {      printf("%s: %s\n",progName,PROGVER);      CmdLineHelp(progName,paraList,switchList,stdout);      EncParInfo(stdout);      EncLpcInfo(stdout);      EncTfInfo(stdout);      EncG729Info(stdout);      EncG723Info(stdout);      exit (1);    }    else      CommonExit(1,"command line error (\"-h\" for help)");  }  if (mainDebugLevel == 1)    fprintf(stderr,"%s: %s\n",progName,PROGVER);  if (mainDebugLevel >= 2) {    printf("%s: %s\n",progName,PROGVER);    printf("CVS Id: %s\n",CVSID);    printf("%s\n",EncParInfo(NULL));    printf("%s\n",EncLpcInfo(NULL));    printf("%s\n",EncTfInfo(NULL));    printf("%s\n",EncG723Info(NULL));    printf("%s\n",EncG729Info(NULL));  }  CmdLineInit(cmdDebugLevel);  /* calc variable default values */  if (!bitReservInitUsed)    bitReservInit = bitReservSize;  if (!regionDuratUsed)    regionDurat = -1;  if (!oriPathUsed)    oriPath = getenv(MP4_ORI_PATH_ENV);  if (!bitPathUsed)    bitPath = getenv(MP4_BIT_PATH_ENV);  if (!oriExtUsed)    oriExt = getenv(MP4_ORI_FMT_ENV);  if (oriExt==NULL)    oriExt = MP4_ORI_EXT;  /* check command line options */  if (bitRate <= 0)    CommonExit(1,"bit rate <= 0");  if (bitReservSize < 0)    CommonExit(1,"bit reservoir size < 0");  if (bitReservInit < 0)    CommonExit(1,"bit reservoir initial bits < 0");  if (bitReservInit > bitReservSize)    CommonExit(1,"bit reservoir initial bits > size");  if (regionDuratUsed && regionDurat < 0)    CommonExit(1,"duration of region < 0");  if (outFileNameUsed && varArgIdx[0]>=0 && varArgIdx[1]>=0)    CommonExit(1,"only one input file allowed when using -o");  if (varArgIdx[0]<0)    CommonExit(1,"no input file specified");    if( strstr( encPara, "-aac_sca" ) ) {    if (bitReservSize<6000)      bitReservSize=6000 ;    bitReservInit=0;        varBitRate=1;  }   /* generate info string for bit stream */  len = 1;  curTime = time((time_t*)NULL);  len += strftime(infoDate,STRLEN,"%Y/%m/%d %H:%M:%S UTC",gmtime(&curTime));  len += strlen(PROGVER);  j = 0;  for (i=0; i<argc; i++)    if (varArgIdx[j] == i)      j++;    else      len += strlen(argv[i])+1;  len += 2*STRLEN;  len += 5*7+1;  if ((info=(char*)malloc(len))==NULL)    CommonExit(1,"memory allocation error");  strcpy(info,"\n");  strcat(info,"date: ");  strcat(info,infoDate);	      strcat(info,"\n");  strcat(info,"prog: ");  strcat(info,PROGVER);	      strcat(info,"\n");  strcat(info,"para:");  j = 0;  for (i=0; i<argc; i++) {    if (varArgIdx[j] == i)      j++;    else {      strcat(info," ");      strcat(info,argv[i]);    }  }  strcat(info,"\n");  infoTail = info+strlen(info);  /* process all files on command line */  fileIdx = 0;  while (varArgIdx[fileIdx] >= 0) {    /* compose file names */    if (ComposeFileName(argv[varArgIdx[fileIdx]],0,oriPath,oriExt,oriFileName,			STRLEN))      CommonExit(1,"composed file name too long");    if (outFileNameUsed) {      if (ComposeFileName(outFileName,0,bitPath,bitExt,bitFileName,			  STRLEN))	CommonExit(1,"composed file name too long");    }    else      if (ComposeFileName(argv[varArgIdx[fileIdx]],1,bitPath,bitExt,			  bitFileName,STRLEN))	CommonExit(1,"composed file name too long");    /* complete info string */    *infoTail = '\0';    strcat(infoTail,"ori: ");    strcat(infoTail,oriFileName);    strcat(infoTail,"\n");    strcat(infoTail,"bit: ");    strcat(infoTail,bitFileName);    strcat(infoTail,"\n");    /* encode file */    if (mainDebugLevel == 1)      fprintf(stderr,"encoding %s -> %s\n",oriFileName,bitFileName);    if (mainDebugLevel >= 2)      printf("encoding %s -> %s\n",oriFileName,bitFileName);    if (Encode(oriFileName,bitFileName,codecMode,bitRate,varBitRate,	       bitReservSize,bitReservInit,encPara,	       noInfo ? "" : info,noHeader,magicString,	       regionStart,regionDurat,numChannelOut,fSampleOut))      CommonWarning("error encoding audio file %s",oriFileName);    fileIdx++;  }    CmdLineEvalFree(paraList);  if (mainDebugLevel == 1)    fprintf(stderr,"%s: finished\n",progName);  if (mainDebugLevel >= 2)    printf("%s: finished\n",progName);  return 0;}/* end of mp4enc.c */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -