首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请教音频压缩g721程序小弟我如何运行了转换不对呢

2012-02-26 
请问音频压缩g721程序我怎么运行了转换不对呢!请问音频压缩g721程序我怎么运行了转换不对呢!我把8位,8khz

请问音频压缩g721程序我怎么运行了转换不对呢!
请问音频压缩g721程序我怎么运行了转换不对呢!
我把8位,8khz   无头的alaw文件压缩为g721的时候,发现文件不是以前的一半大,而且有时候转换只有几十个字节,关于g7X系列的压缩对源文件有那些要求呢.

/*
  *   encode.c
  *
  *   CCITT   ADPCM   encoder
  *
  *   Usage   :   encode   [-3|4|5]   [-a|u|l]   <   infile   >   outfile
  */
#include   <stdio.h>
#include   "g72x.h "


/*
  *   Pack   output   codes   into   bytes   and   write   them   to   stdout.
  *   Returns   1   if   there   is   residual   output,   else   returns   0.
  */
int
pack_output(
unsignedcode,
intbits)
{
static   unsigned   intout_buffer   =   0;
static   intout_bits   =   0;
unsigned   charout_byte;

out_buffer   |=   (code   < <   out_bits);
out_bits   +=   bits;
if   (out_bits   > =   8)   {
out_byte   =   out_buffer   &   0xff;
out_bits   -=   8;
out_buffer   > > =   8;
fwrite(&out_byte,   sizeof   (char),   1,   stdout);
}
return   (out_bits   >   0);
}


main(
intargc,
char**argv)
{
struct   g72x_statestate;
unsigned   charsample_char;
shortsample_short;
unsigned   charcode;
intresid;
intin_coding;
intin_size;
unsigned*in_buf;
int(*enc_routine)();
intenc_bits;

g72x_init_state(&state);

/*   Set   defaults   to   u-law   input,   G.721   output   */
in_coding   =   AUDIO_ENCODING_ULAW;
in_size   =   sizeof   (char);
in_buf   =   (unsigned   *)&sample_char;
enc_routine   =   g721_encoder;
enc_bits   =   4;

/*   Process   encoding   argument,   if   any   */
while   ((argc   >   1)   &&   (argv[1][0]   ==   '- '))   {
switch   (argv[1][1])   {
case   '3 ':
enc_routine   =   g723_24_encoder;
enc_bits   =   3;
break;
case   '4 ':
enc_routine   =   g721_encoder;
enc_bits   =   4;
break;
case   '5 ':
enc_routine   =   g723_40_encoder;
enc_bits   =   5;
break;
case   'u ':
in_coding   =   AUDIO_ENCODING_ULAW;
in_size   =   sizeof   (char);
in_buf   =   (unsigned   *)&sample_char;
break;
case   'a ':
in_coding   =   AUDIO_ENCODING_ALAW;
in_size   =   sizeof   (char);
in_buf   =   (unsigned   *)&sample_char;
break;
case   'l ':
in_coding   =   AUDIO_ENCODING_LINEAR;
in_size   =   sizeof   (short);
in_buf   =   (unsigned   *)&sample_short;
break;
default:
fprintf(stderr,   "CCITT   ADPCM   Encoder   --   usage:\n ");
fprintf(stderr,   "\tencode   [-3|4|5]   [-a|u|l]   <   infile   >   outfile\n ");


fprintf(stderr,   "where:\n ");
fprintf(stderr,   "\t-3\tGenerate   G.723   24kbps   (3-bit)   data\n ");
fprintf(stderr,   "\t-4\tGenerate   G.721   32kbps   (4-bit)   data   [default]\n ");
fprintf(stderr,   "\t-5\tGenerate   G.723   40kbps   (5-bit)   data\n ");
fprintf(stderr,   "\t-a\tProcess   8-bit   A-law   input   data\n ");
fprintf(stderr,   "\t-u\tProcess   8-bit   u-law   input   data   [default]\n ");
fprintf(stderr,   "\t-l\tProcess   16-bit   linear   PCM   input   data\n ");
exit(1);
}
argc--;
argv++;
}

/*   Read   input   file   and   process   */
while   (fread(in_buf,   in_size,   1,   stdin)   ==   1)   {
code   =   (*enc_routine)(in_size   ==   2   ?   sample_short   :   sample_char,
        in_coding,   &state);
resid   =   pack_output(code,   enc_bits);
}

/*   Write   zero   codes   until   all   residual   codes   are   written   out   */
while   (resid)   {
resid   =   pack_output(0,   enc_bits);
}
fclose(stdout);
}


[解决办法]
不懂,帮顶
[解决办法]
不懂,帮顶
[解决办法]
帮不上忙,帮up^_^
[解决办法]
http://topic.csdn.net/t/20020416/09/650050.html


http://phenixlwy.spaces.live.com/blog/cns!159fccd4631dfd9b!248.entry

参考此文
[解决办法]
G729我还知道点

热点排行