使用LAME生成的MP3文件播放速度变快
从sourceforge下载了3.99.5版本的LAME,编译后抄了一段代码来把WAV文件生成MP3,但很奇怪的是生成的文件播放速度都变快了,时长缩小到原来的二分之一左右,检查了一下代码似乎没有问题,请教高手这可能是什么问题。
输入文件采样率是44100,单声道,输出也是,码率为64kbps
int ConvertWavToMp3(char *in_file,char *out_file) { int read, write; FILE *pcm = fopen(in_file, "rb"); FILE *mp3 = fopen(out_file, "wb"); const int PCM_SIZE = 8192; const int MP3_SIZE = 8192; short int pcm_buffer[PCM_SIZE * 2]; unsigned char mp3_buffer[MP3_SIZE]; lame_t lame = lame_init(); lame_set_in_samplerate(lame, 44100); lame_set_VBR(lame, vbr_off); lame_set_mode(lame, MONO); lame_set_num_channels(lame, 1); lame_init_params(lame); do { read = fread(pcm_buffer, 2 * sizeof(short int), PCM_SIZE, pcm); if (read == 0) write = lame_encode_flush(lame, mp3_buffer, MP3_SIZE); else write = lame_encode_buffer_interleaved(lame, pcm_buffer, read, mp3_buffer, MP3_SIZE); fwrite(mp3_buffer, write, 1, mp3); } while (read != 0); lame_close(lame); fclose(mp3); fclose(pcm); return 0; }
直接用lame命令没有问题,调用方法不对吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(10)
你好,请问这个问题是怎么解决的,您所说的每次读入数据太多,是指read = fread(pcm_buffer, 2 * sizeof(short int), PCM_SIZE, pcm);这里吗,应该怎么修改呢?谢谢
回复
@Fai : 大小减半, read = fread(pcm_buffer, sizeof(short int), PCM_SIZE, pcm);
找到原因,每次读入的WAV数据太多了
哦,还有输入16位输出32位也会出问题的。
一般来说波形缩短只可能是音声道被压成了双声道,或者22050的输入被搞成了44100的输出。可以从这两方找问题吧。
引用来自“MuseArt”的评论
你确定in_samplerate是44100吗?单声道还是双声道?
引用来自“Feng_Yu”的评论
在命令行下用Lame命令转码一次试试。
引用来自“MuseArt”的评论
你确定in_samplerate是44100吗?单声道还是双声道?
在命令行下用Lame命令转码一次试试。
你确定in_samplerate是44100吗?单声道还是双声道?