decoder.c
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:3k
源码类别:

Symbian

开发平台:

C/C++

  1. /*
  2.  *===================================================================
  3.  *  3GPP AMR Wideband Floating-point Speech Codec
  4.  *===================================================================
  5.  */
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include "typedef.h"
  9. #include "dec_if.h"
  10. /*
  11.  * DECODER.C
  12.  *
  13.  * Main program of the AMR WB ACELP wideband decoder.
  14.  *
  15.  *    Usage : decoder bitstream_file synth_file
  16.  *
  17.  *    Format for bitstream_file:
  18.  *        Described in TS26.201
  19.  *
  20.  *    Format for synth_file:
  21.  *      Synthesis is written to a binary file of 16 bits data.
  22.  *
  23.  */
  24. extern const UWord8 block_size[];
  25. int main(int argc, char *argv[])
  26. {
  27.     FILE *f_serial;                        /* File of serial bits for transmission  */
  28.     FILE *f_synth;                         /* File of speech data                   */
  29.     Word16 synth[L_FRAME16k];              /* Buffer for speech @ 16kHz             */
  30.     UWord8 serial[NB_SERIAL_MAX];
  31.     Word16 mode;
  32.     Word32 frame;
  33.     void *st;
  34.     fprintf(stderr, "n");
  35.    fprintf(stderr, "===================================================================n");
  36.    fprintf(stderr, " 3GPP AMR-WB Floating-point Speech Decoder, v5.0.0, Mar 05, 2002n");
  37.    fprintf(stderr, "===================================================================n");
  38.    fprintf(stderr, "n");
  39.     /*
  40.      * Read passed arguments and open in/out files
  41.      */
  42.     if (argc != 3)
  43.     {
  44.         fprintf(stderr, "Usage : decoder  bitstream_file  synth_filen");
  45.         fprintf(stderr, "n");
  46.         fprintf(stderr, "Format for bitstream_file:n");
  47.         fprintf(stderr, "  Described in TS26.201.n");
  48.         fprintf(stderr, "n");
  49.         fprintf(stderr, "Format for synth_file:n");
  50.         fprintf(stderr, "  Synthesis is written to a binary file of 16 bits data.n");
  51.         fprintf(stderr, "n");
  52.         exit(0);
  53.     }
  54.     /* Open file for synthesis and packed serial stream */
  55.     if ((f_serial = fopen(argv[1], "rb")) == NULL)
  56.     {
  57.         fprintf(stderr, "Input file '%s' does not exist !!n", argv[1]);
  58.         exit(0);
  59.     }
  60.     else
  61.     {
  62.         fprintf(stderr, "Input bitstream file:   %sn", argv[1]);
  63.     }
  64.     if ((f_synth = fopen(argv[2], "wb")) == NULL)
  65.     {
  66.         fprintf(stderr, "Cannot open file '%s' !!n", argv[2]);
  67.         exit(0);
  68.     }
  69.     else
  70.     {
  71.         fprintf(stderr, "Synthesis speech file:   %sn", argv[2]);
  72.     }
  73.     /*
  74.      * Initialization of decoder
  75.      */
  76.     st = D_IF_init();
  77.     /*
  78.      * Loop for each "L_FRAME" speech data
  79.      */
  80.     fprintf(stderr, "n --- Running ---n");
  81.     frame = 0;
  82.     while (fread(serial, sizeof (UWord8), 1, f_serial ) > 0)
  83.     {
  84.        mode = (Word16)(serial[0] >> 4);
  85.        fread(&serial[1], sizeof (UWord8), block_size[mode] - 1, f_serial );
  86.        frame++;
  87.        fprintf(stderr, " Decoding frame: %ldr", frame);
  88.        D_IF_decode( st, serial, synth, _good_frame);
  89.        fwrite(synth, sizeof(Word16), L_FRAME16k, f_synth);
  90.        fflush(f_synth);
  91.     }
  92.     D_IF_exit(st);
  93.     fclose(f_serial);
  94.     fclose(f_synth);
  95.     return 0;
  96. }