Rel*_*lla 12 c c++ cross-platform wrapper lame
所以我想创建简单的pcm到mp3 C++项目.我希望它使用LAME.我喜欢LAME,但它真的是biiig.所以我需要某种OpenSource,使用纯粹的代码和纯粹的蹩脚代码工作流简化器.所以说我用PCM和DEST文件给它文件.打电话给像
LameSimple.ToMP3(file with PCM, File with MP3 , 44100, 16, MP3, VBR);
矿石这样的东西在4-5行(应该存在的例子)和我有我需要的vhat应该是轻,简单,powerfool,opensource,crossplatform.
有这样的事吗?!?
Mik*_*our 44
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;
}
Run Code Online (Sandbox Code Playgroud)
受 Mike Seymour 回答的启发,我创建了一个纯 C++ 包装器,它允许仅用 2 行代码对 WAV 和 MP3 文件进行编码/解码
convimp3::Codec::encode( "test.wav", "test.mp3" );
convimp3::Codec::decode( "test.mp3", "test_decoded.wav" );
Run Code Online (Sandbox Code Playgroud)
无需担心采样率、字节率和通道数——这些信息是在编码/解码过程中从 WAV 或 MP3 文件中获得的。
该库不使用旧的 C i/o 函数,而仅使用 C++ 流。我觉得它更优雅。
为方便起见,我在 LAME 上创建了一个非常薄的 C++ 包装器并将其称为 lameplus 和一个用于从 WAV 文件中提取采样信息的小型库。
所有文件都可以在这里找到:
编码/解码:https : //github.com/trodevel/convimp3
跛脚:https : //github.com/trodevel/lameplus
wav 处理:也在 github 上,存储库是wave