www.pudn.com > g729_audio_encode.rar > decoder.c


/* 
   ITU-T G.729 Speech Coder with Annex B    ANSI-C Source Code 
   Version 1.4    Last modified: November 2000 
 
   Copyright (c) 1996, 
   AT&T, France Telecom, NTT, Universite de Sherbrooke, Lucent Technologies, 
   Rockwell International 
   All rights reserved. 
*/ 
 
/*-----------------------------------------------------------------* 
 * Main program of the ITU-T G.729  8 kbit/s decoder.              * 
 *                                                                 * 
 *    Usage : decoder  bitstream_file  synth_file                  * 
 *                                                                 * 
 *-----------------------------------------------------------------*/ 
 
#include  
#include  
 
#include "typedef.h" 
#include "basic_op.h" 
#include "ld8k.h" 
#include "dtx.h" 
#include "octet.h" 
 
/*-----------------------------------------------------------------* 
 *            Main decoder routine                                 * 
 *-----------------------------------------------------------------*/ 
 
int main(int argc, char *argv[] ) 
{ 
  Word16  synth_buf[L_FRAME+M], *synth; /* Synthesis                   */ 
  Word16  parm[PRM_SIZE+2];     /* Synthesis parameters        */ 
  Word16  Az_dec[MP1*2], *ptr_Az; /* Decoded Az for post-filter  */ 
  Word16  T0_first;             /* Pitch lag in 1st subframe   */ 
  Word16  pst_out[L_FRAME];     /* Postfilter output           */ 
 
  Word16  voicing;              /* voicing from previous frame */ 
  Word16  sf_voic;              /* voicing for subframe        */ 
 
  Word16  i, Vad; 
  Word32  count_frame; 
  FILE   *f_syn, *f_serial; 
 
  printf("\n"); 
  printf("***********     ITU G.729 8 KBIT/S SPEECH DECODER    ***********\n"); 
  printf("                        (WITH ANNEX B)                        \n"); 
  printf("\n"); 
  printf("------------------- Fixed point C simulation -------------------\n"); 
  printf("\n"); 
  printf("------------------        Version 1.4         ------------------\n"); 
  printf("\n"); 
 
  /* Passed arguments */ 
 
  if ( argc != 3 ) 
    { 
      printf("Usage :%s bitstream_file  outputspeech_file\n",argv[0]); 
      printf("\n"); 
      printf("Format for bitstream_file:\n"); 
      printf("  One (2-byte) synchronization word,\n"); 
      printf("  One (2-byte) size word,\n"); 
      printf("  80 words (2-byte) containing 80 bits.\n"); 
      printf("\n"); 
      printf("Format for outputspeech_file:\n"); 
      printf("  Output is written to a binary file of 16 bits data.\n"); 
      exit( 1 ); 
    } 
 
  /* Open file for synthesis and packed serial stream */ 
 
  if( (f_serial = fopen(argv[1],"rb") ) == NULL ) 
    { 
      printf("%s - Error opening file  %s !!\n", argv[0], argv[1]); 
      exit(0); 
    } 
 
  if( (f_syn = fopen(argv[2], "wb") ) == NULL ) 
    { 
      printf("%s - Error opening file  %s !!\n", argv[0], argv[2]); 
      exit(0); 
    } 
  printf("Input bitstream file  :   %s\n",argv[1]); 
  printf("Synthesis speech file :   %s\n",argv[2]); 
 
#ifndef OCTET_TX_MODE 
  printf("OCTET TRANSMISSION MODE is disabled\n"); 
#endif 
 
  /*-----------------------------------------------------------------* 
   *           Initialization of decoder                             * 
   *-----------------------------------------------------------------*/ 
 
  for (i=0; i