首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Speex解码的帧与原始帧不同

Speex解码的帧与原始帧不同
EN

Stack Overflow用户
提问于 2012-03-11 14:58:57
回答 1查看 950关注 0票数 0

我需要你的帮助来确定以下定点编码的示例代码(摘自speex手册)中的问题。我测试了对160个样本帧进行编码,然后解码回来,但问题是解码后的帧与原始帧完全不同(参见下面的注释中的输出).What是this?.thanks的可能原因

代码语言:javascript
复制
#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;
}
EN

回答 1

Stack Overflow用户

发布于 2012-03-11 15:13:06

Speex是一种有损编解码器。这意味着解码器的输出通常与编码器的输入略有不同。因为Speex被允许稍微更改数据,所以它可以更多地压缩数据。

http://www.speex.org/docs/manual/speex-manual/node4.html#SECTION00413000000000000000

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9653070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档