使用LAME生成的MP3文件播放速度变快

发布于 2021-11-29 05:39:16 字数 1101 浏览 839 评论 10

从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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(10

叹沉浮 2021-12-01 19:25:15

你好,请问这个问题是怎么解决的,您所说的每次读入数据太多,是指read = fread(pcm_buffer, 2 * sizeof(short int), PCM_SIZE, pcm);这里吗,应该怎么修改呢?谢谢

已下线请稍等 2021-12-01 19:19:55

回复
@Fai : 大小减半, read = fread(pcm_buffer, sizeof(short int), PCM_SIZE, pcm);

平生欢 2021-12-01 19:04:10

找到原因,每次读入的WAV数据太多了

岁吢 2021-12-01 18:56:12

哦,还有输入16位输出32位也会出问题的。

输什么也不输骨气 2021-12-01 18:10:37

一般来说波形缩短只可能是音声道被压成了双声道,或者22050的输入被搞成了44100的输出。可以从这两方找问题吧。

反目相谮 2021-12-01 18:03:26

引用来自“MuseArt”的评论

你确定in_samplerate是44100吗?单声道还是双声道?

辞别 2021-12-01 16:53:20

引用来自“Feng_Yu”的评论

在命令行下用Lame命令转码一次试试。

三月梨花 2021-12-01 11:54:49

引用来自“MuseArt”的评论

你确定in_samplerate是44100吗?单声道还是双声道?

月亮是我掰弯的 2021-12-01 09:46:23

在命令行下用Lame命令转码一次试试。

瀞厅☆埖开 2021-11-29 23:12:02

你确定in_samplerate是44100吗?单声道还是双声道?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文