Re: problem: The decoded frame is not as the original one
邓尧 <[email protected]> Mon, 12 Mar 2012 09:50:06 +0800
| Newsgroups | gmane.comp.audio.compression.speex.devel |
|---|---|
| Message-ID | <CAOb3iujA7GPJfw4x3=vytyG3BZqCJ+U-3gKcaVmMxZpqQ4qv-w@mail.gmail.com> |
It's lossy encoding. On Mon, Mar 12, 2012 at 1:17 AM, Mashal al-shboul <[email protected]>wrote: > Hi All, > i need your help in determining the problem in the following sample code > (taken from speex manual) for fixed point encoding. > i tested encoding a 160 sample frame and then decoding it back But The > problem is that the decoded frame is totally different from the original > frame(see output below).What is the possible reason for this?.thanks for > any help > > #include<stdio.h> > #include"intel16.h" > #include <speex/speex.h> > > #define FRAME_SIZE 160 > #define MAX_NB_BYTES 25 > SpeexBits bits; > void *enc_state; > int quality=4; > int nbBytes; > int byte_ptr; > int frame_size; > short frame[FRAME_SIZE]; > char outBuffer[20]; > > SpeexBits decBits; > void *dec_state; > short decFrame[FRAME_SIZE]; > /*===========END ===============================*/ > > > int z=0; > int frame_size; > > > int main (int argc,char **argv) > { > for( z=0;z<160;z++) > { > frame[z]=intel_theme[z]; //array of short from "intel16" header file > } > printf("\n =================================== \n"); > > for( z=0;z<160;z++) > { > printf("%i",frame[z]); > printf (" "); > } > > > /*===============================ENCODING==============================================*/ > > speex_bits_init(&bits); > enc_state = speex_encoder_init(&speex_nb_mode); > speex_encoder_ctl(enc_state,SPEEX_GET_FRAME_SIZE,&frame_size); > speex_encoder_ctl(enc_state,SPEEX_SET_QUALITY,&quality); > speex_bits_reset(&bits); > > //-----------TWO CALLS FOR ENCODING------------------- > speex_encode_int(enc_state, frame, &bits); // encoding > from frame to &bits > nbBytes = speex_bits_write(&bits, outBuffer, MAX_NB_BYTES); //writing > from &bits to outBuffer > //---------------------------------------------------- > > speex_bits_destroy(&bits); > speex_encoder_destroy(enc_state); > > printf("\n outBuffer: "); > for(z=0;z<20;z++) > { > printf("%c",outBuffer[z]); > } > printf("\n \n"); > /*===============================END OF > ENCODING=========================================*/ > > > > /*===============================DECODING==============================================*/ > > speex_bits_init(&decBits); > dec_state=speex_decoder_init(&speex_nb_mode); > speex_decoder_ctl(dec_state, SPEEX_GET_FRAME_SIZE, &frame_size); > > //-----------TWO CALLS FOR DECODING------------------- > speex_bits_read_from(&decBits,outBuffer,nbBytes); > speex_decode_int(dec_state,&decBits,decFrame); > //---------------------------------------------------- > printf("\n BUFFER DECODED BACK \n"); > > for(z=0;z<160;z++) > { > printf("%i",decFrame[z]); > printf (" "); > } > > speex_bits_destroy(&decBits); > speex_decoder_destroy(dec_state); > /*===============================END OF > DECODING==============================================*/ > printf("\n nbBytes: "); > printf("%i",nbBytes); > printf("\n frame_size= "); > printf("%i",frame_size); > printf ("\n"); > //----------------- > printf("end of run!"); > > return 0; > } > > OUTPUT: > //the original frame > 1 -512 16384 512 -768 -2048 -1280 256 -1024 12288 0 8192 253 > 256 -768 12288 0 -16 -768 -512 -1 0 -512 -768 -1536 -512 -512 > -768 16384 0 8192 -512 16384 512 -768 -2048 -1280 256 -1024 > 12288 0 8192 253 256 -768 12288 0 -16 -768 -512 -1 0 -512 > -768 -1536 -512 -512 -768 16384 0 8192 -512 16384 512 -768 > -2048 -1280 256 -1024 12288 0 8192 253 256 -768 12288 0 -16 > -768 -512 -1 0 -512 -768 -1536 -512 -512 -768 16384 0 8192 > -512 16384 512 -768 -2048 -1280 256 -1024 12288 0 8192 253 256 > -768 12288 0 -16 -768 -512 -1 0 -512 -768 -1536 -512 -512 > -768 16384 0 8192 -512 16384 512 -768 -2048 -1280 256 -1024 > 12288 0 8192 253 256 -768 12288 0 -16 -768 -512 -1 0 -512 > -768 -1536 -512 -512 -768 16384 0 -1 0 -512 -768 -1536 -512 > -512 -768 16384 -1 > =================================== > > outBuffer: �9�p�C��m�Cx6�� > > //the decoded frame .totally different > BUFFER DECODED BACK > 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 > 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 > 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 > 0 0 0 0 0 2838 -3982 4801 -4136 432 -1945 610 1035 -1090 > 2752 -558 1431 -2320 -1016 789 5084 -2395 -2916 -225 -311 -703 > 586 1110 -557 -1152 1096 229 425 5825 -933 3922 -6289 7423 > -6636 -793 -2123 -354 991 -1947 3958 -1070 1380 -2120 -2777 > -679 9010 -2451 -4210 -1845 229 -1687 317 1443 -1355 -2818 214 > 721 -313 9997 -60 3489 -5953 9277 -6990 -2716 -1642 -792 477 > -2417 5801 -1200 1055 -1744 -2927 -2053 10273 -1913 -4342 -2718 > 427 > nbBytes: 20 > frame_size= 160 > > > > > > > > > _______________________________________________ > Speex-dev mailing list > [email protected] > http://lists.xiph.org/mailman/listinfo/speex-dev > > _______________________________________________ Speex-dev mailing list [email protected] http://lists.xiph.org/mailman/listinfo/speex-dev