使用 Lame 和 Libmad 编译 SOX 以用于 Windows
使用 Lame 和 Libmad 编译 SOX 以用于 Windows。
引言
本文介绍如何使用 Lame 和 Libmad 编译 sox,为 Windows 启用 mp3 支持。
背景
我们许多人都知道音频处理工具 sox,可以通过它编辑各种格式的音频文件。但令人遗憾的是,开发人员发现 sox 不支持 mp3。
Sox 是 SourceForge 的一个开源项目,它建立在另一个开源项目 Lame 的源代码之上。有趣的是,Lame 支持 mp3,但 sox 不支持。但是 sox 拥有比 lame 更多的音频编辑功能,这使得 sox 非常有用。
现在,为了启用 mp3 支持,我们需要将 Sox 与 Lame 和 Libmad 一起编译。Linux 服务器有其编译流程,但 Windows 有自己的方法。如果您谷歌搜索,可以找到一篇由“Jason Smestad”撰写的入门文章。但当我尝试时,我发现了一些问题,有些步骤与描述的不太一样。
我不知道为什么会这样,但在之后我尝试了一种略有不同的方法并成功了。
本文中,我没有任何功劳,所有功劳都归“Jason Smestad”,我只是发布这篇文章,希望像我一样的开发者能够正确操作。
使用代码
先决条件
- Visual Studio 2005 / 2008
- Cmake 2.6
- Windows XP, SP-2 [应该与其他版本兼容,但我没试过]
- Sox 14.0.1
- Lame 3.97
- Libmad 0.15.1b
步骤 1 [编译 Lame]
- 解压 LAME 源代码并将其作为 Visual Studio 项目打开。
- 在“解决方案资源管理器”中 -> 右键单击“libmp3lame” -> 选择“配置属性”。
-> C/C++ -> 代码生成 -> 运行时库” -> 将值更改为“多线程 DLL (/MD)”。 - 在“解决方案资源管理器”中 -> 右键单击“mpg123” -> 选择“配置属性”。
-> C/C++ -> 代码生成 -> 运行时库” -> 将值更改为“多线程 DLL (/MD)”。 - 构建 libmp3lame
- 构建 mpglib
- 在该文件夹中搜索 *libmp3lame.lib* 并将其重命名为 *mp3lame.lib*。
- 在外部创建一个文件夹并随意命名,这里我们暂时命名为 lameforsox。
- 在其中创建一个名为“lame”的文件夹,然后在 lame 源代码文件夹中搜索“*lame.h*”并将其复制到这个 lame 文件夹中。
- 将 *mp3lame.lib* 和 *mpg123.lib* 复制到 lameforsox 文件夹中。
步骤 2 [编译 Libmad]
- 解压 Libmad 源代码并将其作为 Visual Studio 项目打开。
- 在“解决方案资源管理器”中 -> 右键单击“源文件”文件夹中的每个文件 -> 选择“配置属性” -> C/C++ -> 代码生成 -> 运行时库” -> 将值更改为“多线程 DLL (/MD)”。
- 构建 Libmad。
- 在该文件夹中搜索 *mad.h* 并将其复制。
- 在应用程序外部创建另一个文件夹并随意命名,这里我们暂时命名为“*madforsox*”,并在其中创建一个名为“*mad*”的文件夹。
- 将 *mad.h* 复制到“*mad*”文件夹中。
- 在 Libmad 源代码文件夹中搜索 *libmad.lib* 并将其重命名为 *mad.lib*。
- 将 *mad.lib* 复制到“*madforsox*”文件夹中。
步骤 3 [使用 Lame 和 Mad 库编译 Sox]
- 打开 Visual Studio。选择“工具” -> “选项” -> “项目和解决方案” -> “VC++ 目录” -> “包含目录” -> 单击“...”按钮 -> 浏览并添加 *lame.h* 和 *mad.h*(如果这些头文件不存在)。
- 选择“库文件” -> 单击“...”按钮 -> 添加这些库文件,即 *mp3lame.lib*、*mpg123.lib* 和 *mad.lib*。
- 访问 sox 源代码文件夹,找到 *CMakeLists.txt*。
- 打开它,找到 `if (NEED_LIBM)`。
set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} -lm)
它应该在第 62-65 行之间。在该行之后留出一些空间并添加:
set(CMAKE_REQUIRED_LIBRARIES {CMAKE_REQUIRED_LIBRARIES} mpglib) optional(HAVE_LAME_LAME_H lame/lame.h mp3lame lame_init mp3)
编辑“*lame/lame.h*”为“*lame.h*”,即:该行应如下所示:
optional(HAVE_LAME_LAME_H lame.h mp3lame lame_init mp3)
- 运行 -> Cmd -> 将路径更改为 *Sox* 目录。
- 键入 **cmake.exe ./ -G "Visual Studio 9 2008"**;如果您使用 Visual Studio 2005,则将其改为 **cmake.exe ./ -G "Visual Studio 8 2005"**。
- 如果一切正常,则会出现以下信息:
... include files HAVE_MAD_H1 – found mad_stream_buffer in madmad_stream_buffer in mad – found include files HAVE_LAME_LAME_H1 – found lame_init in mp3lamelame_init in mp3lame - found
- 现在打开 Visual Studio 并打开 sox 的解决方案文件 [* .sln]。
- 重新生成“所有生成”。如果出现“文件修改已检测到”,请选择“重新加载”,否则让重新生成完成。
- 在“解决方案资源管理器”中 -> 右键单击“libsox” -> 选择“预处理器定义”(右键单击“libsox” -> 属性 -> 配置属性 -> C/C++ -> 预处理器),在第一行之前添加 **HAVE_STRING_H**。将“运行时库”设置为“多线程 DLL (/MD)”,如上所述。
- 对 sox 执行相同操作。然后选择“链接器” -> “输入” -> “附加依赖项” -> 单击“...”按钮 -> 在最后一行之后添加 **mpg123.lib**。
- 现在构建 libsox。
- 构建 sox。
- 运行 -> cmd -> 切换到 sox 目录 -> 输入 **sox –h**。
- 现在您将在“支持的文件格式”部分的使用输出中找到“mp3, mp2”。
关注点
我没有尝试过最新版本的 sox。我可能会在不久的将来提供更新。