geaeU33 2014-06-07 11:56
浏览 929

windows下 vc6.0中使用speex库压缩音频文件

想在windows下使用speex库压缩音频文件 代码使用speex文档中附录A的代码 只是把其中的文件路径修改了 但是编码之后的文件大小只用2K 原文件900K左右,而且解码后无法播放,全是杂音,请问是怎么回事 编码文件是PCM格式的。

代码如下
#include
#include
#include
#include
#define FRAME_SIZE 160

void main()
{

FILE *fin,*fout;

short in[FRAME_SIZE];

float input[FRAME_SIZE];

char cbits[200];

int nbBytes;

void *state;

SpeexBits bits;

int i, tmp;

int test = 0;

 state = speex_encoder_init(&speex_nb_mode);  
 tmp=8;         
 speex_encoder_ctl(state, SPEEX_SET_QUALITY, &tmp);  
 fin = fopen("D:/CODE/samplepcm/saima.pcm", "r");
 fout = fopen("D:/CODE/samplepcm/saima.spx", "wb");   
 speex_bits_init(&bits);      

while (1)   
{   
     fread(in, sizeof(short), FRAME_SIZE, fin); 
    if (feof(fin))  
        break;
    for (i=0;i<FRAME_SIZE;i++)    
       input[i]=in[i];   
   speex_bits_reset(&bits); 
   speex_encode(state, input, &bits);  
   nbBytes = speex_bits_write(&bits, cbits, 200);    
   fwrite(&nbBytes, sizeof(int), 1, fout);    
   fwrite(cbits, 1, nbBytes, fout);   
 }  
 speex_encoder_destroy(state);     
 speex_bits_destroy(&bits);     

fclose(fin);
}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥20 关于#硬件工程#的问题,请各位专家解答!
    • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
    • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
    • ¥30 截图中的mathematics程序转换成matlab
    • ¥15 动力学代码报错,维度不匹配
    • ¥15 Power query添加列问题
    • ¥50 Kubernetes&Fission&Eleasticsearch
    • ¥15 報錯:Person is not mapped,如何解決?
    • ¥15 c++头文件不能识别CDialog
    • ¥15 Excel发现不可读取的内容