我想创建一个简单的pcm to mp3 C++项目。我希望它使用LAME。我喜欢蹩脚,但它真的很大。因此,我需要一些OpenSource工作从纯代码与纯差劲的代码工作流程简易器。所以说我给它的文件与PCM和DEST文件。调用类似于以下内容:
LameSimple.ToMP3(file with PCM, File with MP3 , 44100, 16, MP3, VBR);
或者这样的东西在4-5行(当然应该有例子),我需要它应该是轻量级的,简单的,强大的,开源的,跨平台的。
有没有这样的东西?
发布于 2010-03-23 08:52:47
Lame真的不难使用,尽管如果你需要的话,有很多可选的配置函数。编码一个文件需要比4-5行稍多一点的代码,但不会太多。这是我拼凑起来的一个工作示例(只有基本功能,没有错误检查):
#include <stdio.h>
#include <lame/lame.h>
int main(void)
{
int read, write;
FILE *pcm = fopen("file.pcm", "rb");
FILE *mp3 = fopen("file.mp3", "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_default);
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;
}
发布于 2015-04-26 09:52:05
受Mike Seymour回答的启发,我创建了一个纯C++包装器,它只需2行代码即可对WAV和MP3文件进行编码/解码
convimp3::Codec::encode( "test.wav", "test.mp3" );
convimp3::Codec::decode( "test.mp3", "test_decoded.wav" );
无需关心采样速率、字节速率和通道数-这些信息是在编码/解码过程中从WAV或MP3文件中获得的。
该库不使用旧的C i/o函数,而只使用C++ streams。我觉得它更优雅。
为了方便起见,我在LAME上创建了一个非常薄的C++包装器,并将其命名为lameplus和一个用于从WAV文件中提取采样信息的小型库。
所有文件都可以在以下位置找到:
编码/解码:https://github.com/trodevel/convimp3
lameplus:https://github.com/trodevel/lameplus
wav处理:同样在github上,仓库是wave
发布于 2013-02-01 09:14:11
我通过将41000更改为大约8000来实现此功能:
lame_set_in_samplerate(lame, 44100);
至
lame_set_in_samplerate(lame, 8000);
并使用以下命令编译了prog.c:
gcc prog.c -lmp3lame -o prog
file.pcm听起来不如file.mp3好。当我使用这个bash命令时,我得到了一个完美的转换:
lame -V 5 file.wav file.mp3
https://stackoverflow.com/questions/2495420
复制相似问题