- 论坛徽章:
- 0
|
我下了ITU-T G.729 Annex B的源代码,该源代码针对音频文件形式的编解码是直接可用的
我针对一个.wav文件进行了编码,发现编码后的文件与编码前的差不多大。
不应该是16:1的压缩比马,怎么会这样呢?
我刚刚做过利用intel ipp库的729编解码,那个是从.wav文件每次取160byte个样点,然后压缩成10个byte并加上6个byte点的头,压缩比16:1。两者为什么差这么多呢??
我把那个代码的main函数贴出来
PRM_SIZE=11
L_FRAME=80
SERIAL_SIZE=82 Word16是short型,Word32是int型
这个函数每次从.wav文件中读出80个byte,却向编码后的文件写入82byte的数据
int main(int argc, char *argv[] )
{
FILE *f_speech; /* File of speech data */
FILE *f_serial; /* File of serial bits for transmission */
extern Word16 *new_speech; /* Pointer to new speech data */
Word16 prm[PRM_SIZE+1]; /* Analysis parameters. */
Word16 serial[SERIAL_SIZE]; /* Output bitstream buffer */
Word16 syn[L_FRAME]; /* Buffer for synthesis speech */
Word16 i, frame; /* frame counter */
Word32 count_frame;
/* For G.729B */
Word16 nb_words;
Word16 vad_enable;
/*--------------------------------------------------------------------------*
* Initialization of the coder. *
*--------------------------------------------------------------------------*/
Init_Pre_Process();
Init_Coder_ld8k();
for(i=0; i<PRM_SIZE; i++) prm[i] = (Word16)0;
/* for G.729B */
Init_Cod_cng();
/* Loop for each "L_FRAME" speech data. */
frame =0;
count_frame = 0L;
while( fread(new_speech, sizeof(Word16), L_FRAME, f_speech) == L_FRAME)//读入80个
{
printf("Frame = %ld\r", count_frame++);
if (frame == 32767) frame = 256;
else frame++;
Pre_Process(new_speech, L_FRAME);
Coder_ld8k(prm, syn, frame, vad_enable);
prm2bits_ld8k( prm, serial);
nb_words = add((Word16)serial[1], 2);
fwrite(serial, sizeof(Word16), nb_words, f_serial);//写出82个
}
printf("%ld frames processed\n", count_frame);
return (0);
} |
|