小弟用lame压缩mp3,不知道怎么做~~谁来帮帮忙

Happy0403 2011-07-20 06:04:42


两个大括号里的分别是Encode和Decode,因为源码很乱,所以我吧Record()和Replay()拿走了。
我录音的时候的设置是这样的:



#define CANNELS 1
#define SAMPLE_RATE (44100/2)
#define BITS_PER_SAMPLE 16
wf.wFormatTag = WAVE_FORMAT_PCM; // PCM格式
wf.nChannels = CANNELS; // 单声道
wf.wBitsPerSample = BITS_PER_SAMPLE; // 16位的样本
wf.nSamplesPerSec = SAMPLE_RATE; // 44100/2的采样率
wf.nBlockAlign = wf.nChannels * wf.wBitsPerSample / 8; // 这个不用设置了
wf.nAvgBytesPerSec = wf.nSamplesPerSec * wf.nBlockAlign; // 这个也是




int main ()
{
Record ();

/* let us encode it ! */
{
int Tick = GetTickCount ();
lame_global_flags *gfp;
gfp = lame_init ();

lame_set_bWriteVbrTag(gfp, 0);

lame_set_errorf(gfp,error_hander);
lame_set_debugf(gfp,error_hander);
lame_set_msgf(gfp,error_hander);


lame_set_num_channels(gfp, CANNELS);
lame_set_in_samplerate(gfp, SAMPLE_RATE);
lame_set_brate(gfp, 128);
lame_set_mode(gfp, MONO);
lame_set_quality(gfp, 2); /* 2=high 5 = medium 7=low */
//lame_set_out_samplerate (gfp, SAMPLE_RATE);

lame_init_params (gfp);

int num_samples = DataSize/BITS_PER_SAMPLE*8/CANNELS;
unsigned mp3buffer_size = (unsigned)(1.25 * num_samples + 7200);

mp3Data = new unsigned char[mp3buffer_size];

Mp3Size = 0;
Mp3Size = lame_encode_buffer(gfp,
(short *)wh.lpData, 0,
num_samples, mp3Data, mp3buffer_size);

Mp3Size += lame_encode_flush (gfp, mp3Data, mp3buffer_size);

lame_mp3_tags_fid(gfp, 0);

lame_close(gfp);

printf("lame spent : %u\n", GetTickCount () - Tick);
}
ZeroMemory (wh.lpData, DataSize);


// let us decode it!
hip_t hip = hip_decode_init ();


mp3data_struct md;
int DecodeSize;
DecodeSize = hip_decode_headers (hip, mp3Data, Mp3Size, (short *)wh.lpData, 0, &md);

hip_decode_exit (hip);

printf ("mp3Data Size : %u, OrgSize : %u decodeSize: %u\t %0.2f%% \n", Mp3Size, DataSize, DecodeSize, Mp3Size*100.0/DataSize);

Replay();

printf ("press any key to exit;\n");
getchar ();
}



程序能成功运行,出现两个错误提示:
hip: bitstream problem, resyncing skipping 255 bytes...
hip: bitstream problem, resyncing skipping 162 bytes...
可是,本来我录音是有1.5S的,回放却只有0.75S左右。。

我看LAME的API说明。。看不懂 - - ,它就提供一些代码,我Copy下来就这样了。
是哪里出错了呢?(加密的时候用不用选择 样本位数 呢?我找不到设置的函数)
...全文
316 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
tangyonginchina 2013-09-05
  • 打赏
  • 举报
回复
可以告诉一下解决办法不呢,我现在也碰到这样的问题
_ontheway_ 2013-06-21
  • 打赏
  • 举报
回复
我也碰到你这样的问题,不过已经解决了,你搜下ID3相关资料,就知道怎么解决了。

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧