【问题标题】:windows mp3 decode library c c++ [closed]windows mp3解码库c c++ [关闭]
【发布时间】:2013-02-19 23:27:47
【问题描述】:

我花了一整天的时间,这让我发疯了

有人知道将 mp3 解码为简单的 16 位 pcm(波形)文件的简单方法吗?我需要一些可以随我的商业程序一起发布的东西,所以我更喜欢 .lib

我找到了 libmpg123.dll,但我不知道如何让我的程序与 msvc 2010 中的 dll 链接。我知道我需要添加一个引用,但是当我单击“添加新引用”时,我得到的只是一个带有项目名称和项目目录标题的空对话框,没有可单击的内容。我尝试使用 lib 工具将 .dll 转换为 .lib,但一直抱怨 .def 文件格式不好。

我尝试构建 madplayer,但 id3tag.h 无法正常工作,并且我找不到有关使用 libmad 的文档或示例

跛脚看起来太大了

任何关于 .lib 快速解决方案的想法我都可以链接并完成

谢谢,史蒂夫

【问题讨论】:

    标签: c++ windows mp3 decode


    【解决方案1】:

    mpg123 很好。我可以看到您在获取静态库 (.lib) 时遇到了麻烦。

    获取库有两种方式:

    1. 构建源代码。它更灵活,但有点棘手。如果您下载源代码,您可以通过以下路径找到 VS2010 的端口:ports\MSVC++\2010。但在这种情况下,您将面临安装YASM 和玩弄构建配置的问题(似乎源代码包中的配置没有正确调整)。
    2. 通过转换 .def 文件来使用 lib 工具。您不需要源,因为二进制包已经包含 .h 和 .def 文件。我会详细解释:

      1. 下载二进制文件(win32win64)并解压到D:\mpg123 文件夹。
      2. 从开始运行 -> Microsoft Visual Studio 2010 -> Visual Studio 工具 -> Visual Studio 命令提示符 (2010)。
      3. 转到您的文件夹cd D:\mpg123D: 并运行以下行:lib /def:libmpg123-0.dll.def(或者无论如何调用 def 文件)。
      4. 现在您的文件夹中有所需的 .lib 文件 libmpg123-0.dll.lib

    但请注意,“框架和引用”属性页用于设置对 .NET Framework 程序集、COM 组件或外部项目 (MSDN) 的引用,在您的情况下,您应该在项目中指定额外的链接器依赖项[配置属性 => 链接器 => 输入 => 附加依赖项]。

    【讨论】:

    • 谢谢,我会试试的。我在fossies.org/linux/misc/mpg123-1.15.1.tar.gz 找到了源代码,它有一个 mscv++ 2010 项目,但无法编译。是否有必要先运行某种配置工具或其他东西?谢谢
    • 我已经指定了附加信息。试试看。我认为 lib 工具也必须工作。
    • 因为编译源码可能真的很痛苦:) 而且没有配置工具。
    • 太好了,谢谢,我的应用程序完全按照您的步骤构建(制作了 .lib)。在我尝试运行 lib 之前,我是从命令提示符执行的,但它不起作用。现在它构建但不运行,我只需要将 .dll 放在某个地方,我猜是 system32?那是正确的地方吗?
    • 我将 dll 放在 windows\system32 中,它现在可以工作了。太感谢了!昨天一整天都让我发疯。当我发布我的应用程序时,您认为我应该将 .dll 安装在 windows\system32 还是我的安装文件夹中?
    【解决方案2】:

    Olexander 的回答很好用,非常感谢

    我有一件小事要补充,当您下载 mpg123-1.15.1-x86.zip 时

    您会看到 libmpg123-0.dll(dll)和 libmpg123-0.dll.def 用于制作上述 .lib 的东西。最好将名称更改为 libmpg123-0.def 否则它会寻找一个名为 libmpg123-0.dll.dll 的 dll,这不是很好

    除此之外,它工作得很好。我不敢相信这些信息几年前不在互联网上。感谢亚历山大,感谢stackoverflow

    仅供参考,这是一个使用 mpg123 的简单 mp3 解码器

    #include "mpg123/mpg123.h"
    
    #define INBUFF  16384
    #define OUTBUFF 32768
    
    
    void loadMp3File(const char* filename)
    {
        mpg123_handle *mh;
        unsigned char *buffer;
        size_t buffer_size;
        size_t done;
        int err;
    
        int channels, encoding;
        long rate;
    
        mpg123_init();
        mh = mpg123_new(NULL, &err);
        buffer_size = mpg123_outblock(mh);
        buffer = (unsigned char*) malloc(buffer_size * sizeof(unsigned char));
    
        /* open the file and get the decoding format */
        mpg123_open(mh, filename);
        mpg123_getformat(mh, &rate, &channels, &encoding);
    
        /* set the output format and open the output device */
        int m_bits = mpg123_encsize(encoding);
        int m_rate = rate;
        int m_channels = channels;
    
    
        /* decode and play */
        for (int totalBtyes = 0 ; mpg123_read(mh, buffer, buffer_size, &done) == MPG123_OK ; ) {
            totalBtyes += done;
        }
    
    
        /* clean up */
        free(buffer);
        mpg123_close(mh);
        mpg123_delete(mh);
        mpg123_exit();
    
    }
    

    【讨论】:

      猜你喜欢
      • 2012-04-07
      • 2011-09-06
      • 2012-01-21
      • 2010-11-22
      • 1970-01-01
      • 1970-01-01
      • 2012-12-16
      • 2011-02-25
      • 1970-01-01
      相关资源
      最近更新 更多