首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有什么差劲的C++包装器\简化器(在Linux Mac上工作,并从纯代码中取胜)?

有没有什么差劲的C++包装器\简化器(在Linux Mac上工作,并从纯代码中取胜)?
EN

Stack Overflow用户
提问于 2010-03-23 04:19:39
回答 4查看 23K关注 0票数 16

我想创建一个简单的pcm to mp3 C++项目。我希望它使用LAME。我喜欢蹩脚,但它真的很大。因此,我需要一些OpenSource工作从纯代码与纯差劲的代码工作流程简易器。所以说我给它的文件与PCM和DEST文件。调用类似于以下内容:

LameSimple.ToMP3(file with PCM, File with MP3 , 44100, 16, MP3, VBR);

或者这样的东西在4-5行(当然应该有例子),我需要它应该是轻量级的,简单的,强大的,开源的,跨平台的。

有没有这样的东西?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-03-23 08:52:47

Lame真的不难使用,尽管如果你需要的话,有很多可选的配置函数。编码一个文件需要比4-5行稍多一点的代码,但不会太多。这是我拼凑起来的一个工作示例(只有基本功能,没有错误检查):

代码语言:javascript
运行
复制
#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;
}
票数 53
EN

Stack Overflow用户

发布于 2015-04-26 09:52:05

受Mike Seymour回答的启发,我创建了一个纯C++包装器,它只需2行代码即可对WAV和MP3文件进行编码/解码

代码语言:javascript
运行
复制
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

票数 7
EN

Stack Overflow用户

发布于 2013-02-01 09:14:11

我通过将41000更改为大约8000来实现此功能:

代码语言:javascript
运行
复制
lame_set_in_samplerate(lame, 44100);

代码语言:javascript
运行
复制
lame_set_in_samplerate(lame, 8000);

并使用以下命令编译了prog.c:

代码语言:javascript
运行
复制
gcc prog.c -lmp3lame -o prog

file.pcm听起来不如file.mp3好。当我使用这个bash命令时,我得到了一个完美的转换:

代码语言:javascript
运行
复制
lame -V 5 file.wav file.mp3
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2495420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档