请问音频压缩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我还知道点