나는 고정 소수점 인코딩 (된 Speex 매뉴얼로부터 취해진) 다음 샘플 코드에 문제 판정에 도움을 필요로 디코딩. 160 샘플 프레임 인코딩을 테스트 한 다음 다시 디코딩했으나 문제는 디코딩 된 프레임이 원래 프레임과 완전히 다르다는 것입니다 (주석 아래 출력 참조). 가능한 이유는 무엇입니까?. 감사합니다.된 Speex 프레임이 아닌 최초의 프레임
#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];
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 (" ");
}
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);
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");
//-----------DECODING-------------------
speex_bits_init(&decBits);
dec_state=speex_decoder_init(&speex_nb_mode);
speex_decoder_ctl(dec_state, SPEEX_GET_FRAME_SIZE, &frame_size);
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 : // 원래 프레임 1 16384 -512 512 -768 -2048 -1280 -1024 256 12288 0 8192 253 12288 256 -768 -768 -512 -16 0 -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 -4136 –
// 디코딩 프레임 .totally 다른 버퍼 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 2838 -3982 4801 -4136 432 -1945 610 1035 -1090 2752 -558 1431 -2320 - -6636 -793 -2123 -354 991 -1947 3958 -1070 1380 -2120 -2777 -679 -933 3922 -6289 7423 -557 -1152 1,096 229 425 5,825 -311 -703 586 1110 1016 789 5084 -2395 -2916 -225 9010 –
이 질문에 대한 내 대답을 참조하십시오 http://stackoverflow.com/a/10048755/273501 –