libsndfile是一个C库,用于读取和编写包含采样音频数据的文件。
Libsndfile项目最初是由Erik de Castro lopo [email protected] aka @erikd开发和维护的。该项目是在https://github.com/erikd/libsndfile上在github上开发的。
版本1.0.30发布后,@erikd将项目转移到了Libsndfile团队,请参阅作者有关详细信息。
libsndfile的规范源代码存储库位于https://github.com/libsndfile/libsndfile。
您可以使用以下方式获取源代码
git clone https://github.com/libsndfile/libsndfile.git
有关Android的建筑,请参阅Building Forandroid。
当前有两个构建系统:基于GNU自动室的传统构建系统和现代基于CMAKE的构建系统。下面记录了CMAKE构建系统的使用。
在Debian或Ubuntu上为Libsndfile设置构建环境很简单:
sudo apt install autoconf autogen automake build-essential libasound2-dev
libflac-dev libogg-dev libtool libvorbis-dev libopus-dev libmp3lame-dev
libmpg123-dev pkg-config python
对于其他Linux发行版或任何 *BSD,尽管包装安装工具和软件包名称可能略有不同,但设置应相似。
同样,在Mac OS X上,假设已经安装了啤酒:
brew install autoconf autogen automake flac libogg libtool libvorbis opus mpg123 pkg-config
建立构建环境后,构建和测试libsndfile即可如下简单:
autoreconf -vif
./configure --enable-werror
make
make check
尽管Autotools是主要且推荐的构建工具链,但CMAKE META构建生成器也可用。使用CMAKE的构建过程分为两个阶段。首先,从配置脚本创建标准构建文件。然后,平台的本机构建工具用于实际建筑物。 Cmake可以生产Microsoft Visual Studio项目和解决方案文件,Unix Makefiles,Xcode Projects等。
某些IDE本地支持CMAKE或使用插件,请检查IDE文档以获取详细信息。
有一些推荐的软件包可以启用Libsndfile的所有功能:
Cmake可以处理非现场构建,从同一源树实现多个构建,并进行交叉兼容。在源树之外构建目录树的能力是一个关键功能,可确保如果删除了构建目录,则源文件仍然不受影响。
mkdir CMakeBuild
cd CMakeBuild
然后将cmake命令与目录一起运行,其中cmakelists.txt脚本作为参数(支持相对路径):
cmake ..
此命令将将构建脚本或解决方案配置为CMakeBuild目录。 Cmake足够聪明,可以在安装了Visual Studio(如果您安装了Visual Studio)下在Linux或Visual Studio解决方案下创建Unix Makefiles,但是可以使用-G命令行参数配置生成器:
cmake .. -G"Unix Makefiles"
构建过程取决于所选的生成器。使用“ Unix Makefiles”,您可以输入:
make & make install
使用“ Visual Studio”和其他一些发电机,您可以从CMakeBuild目录打开解决方案或项目,并使用IDE构建。
最后,您可以使用Unified命令:
cmake --build .
CMAKE还提供基于QT的跨平台GUI,CMAKE-GUI。使用它是微不足道的,不需要详细的解释。
运行cmake命令时,您可以使用/D<parameter>=<value>传递其他选项。一些有用的系统选项:
CMAKE_C_FLAGS其他C编译器标志CMAKE_BUILD_TYPE配置类型, DEBUG , RELEASE , RELWITHDEBINFO或MINSIZEREL 。 DEBUG是默认的CMAKE_INSTALL_PREFIX构建安装位置,与--prefix configure相同有用的libsndfile选项:
BUILD_SHARED_LIBS构建ON库(Windows下的DLL)时,否则构建静态库。默认情况下,此选项已OFF 。
BUILD_PROGRAMS默认情况ON ,从programs/目录中构建libsndfile的实用程序。
BUILD_EXAMPLES默认情况ON ,构建示例。
BUILD_TESTING构建测试。然后,您ON情况下可以使用ctest命令运行测试。 ON BUILD_SHARED_LIBS设置为禁用此选项。
ENABLE_EXTERNAL_LIBS启用ogg,vorbis,flac和opus支持。如果找到了所有依赖库,则可以使用此选项并设置为ON 。
ENABLE_MPEG -mp3支持。如果找到了所有依赖库,则可以使用此选项并设置为ON 。
ENABLE_BOW_DOCS默认情况下, OFF黑白文档主题。
ENABLE_EXPERIMENTAL启用实验代码。如果不确定,请不要使用它。默认情况下,此选项已OFF 。
ENABLE_CPACK启用CPACK支持。默认情况下此选项已ON 。
ENABLE_PACKAGE_CONFIG生成和安装软件包配置文件。
INSTALL_PKGCONFIG_MODULE生成和安装pkg -config模块。
INSTALL_MANPAGES安装程序页面。此选项默认ON
ENABLE_STATIC_RUNTIME默认情况下,在Windows平台(MSVC和MINGW)上OFF静态运行时。
注意:对于MSVC编译器,此选项已对CMAKE> = 3.15进行弃用,请参见策略CMP0091。改用CMAKE_MSVC_RUNTIME_LIBRARY选项。
注意:对于mingw工具链,此选项是实验性的。如果启用了它,然后再次禁用,则需要清除CMAKE CACH(删除CMakeCache.txt)。
ENABLE_COMPATIBLE_LIBSNDFILE_NAME将dll名称设置为libsndfile-1.dll (canonical name)在Windows平台上, sndfile.dll否则,默认情况OFF 。根据平台,图书馆名称可能不同。 Windows平台上众所周知的DLL名称是libsndfile-1.dll ,因为构建Windows库的唯一方法是使用Autotools mingw工具链。此名称是MINGW生态系统的本机,AutoTools使用sndfile目标的MINGW平台规则构建了它。但是,当您使用本机Windows编译器使用CMAKE构建时,名称为sndfile.dll 。这是本机Windows平台的名称,因为Windows没有库命名规则。它是首选的,因为您可以使用相同的sndfile名称在任何平台上使用Package Manager或CMAKE的find_library命令搜索库。
ENABLE_SSE2默认情况下,添加编译器标志以ON SSE2。
此选项仅适用于X86和GCC兼容编译器配置。
如果您为其他SIMD集编译,例如AVX2,则可能需要将ENABLE_SSE2设置为OFF 。
注意:对于X64配置,此选项不活动,因为SSE2始终在此模式下可用,并且默认情况下启用了所有优化。
弃用的选项:
DISABLE_EXTERNAL_LIBS禁用OGG,Vorbis和FLAC支持。由ENABLE_EXTERNAL_LIBS代替BUILD_STATIC_LIBS构建静态库。改用BUILD_SHARED_LIBS首先,您需要将FindOgg.cmake , FindVorbis.cmake , FindFLAC.cmake和FindOpus.cmake文件添加到您的cmake项目(通常是cmake )内的某个目录中,并将其添加到CMAKE_MODULE_PATH :
project(SomeApplication)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
现在,您可以使用此命令从您的CMakeLists.txt中搜索libsndfile库:
find_package(SndFile)
SndFile_FOUND设置为“找到库ON 。
如果libsndfile依赖性至关重要,则可以添加REQUIRED find_package :
find_package(SndFile REQUIRED)
如果找不到libsndfile ,则使用选项find_package将终止配置过程。
您还可以添加版本检查:
find_package(SndFile 1.0.29)
如果libsndfile版本为<1.0.29,则find_package将报告错误。
如果需要,可以组合REQUIRED版本。
链接libsndfile库使用:
target_link_libraries(my_application PRIVATE SndFile::sndfile)
有关Visual Studio系统CRT库的第一个建议,它是将系统代码链接到每个C应用程序的静态或动态库。
您可以在Visual Studio项目属性中找到相关选项:
C/C++ -> Code Generation -> Runtime Library
系统CRT库的动态版本默认是,这意味着最终用户需要在其系统上安装相同的运行时库。很可能是这样,但是如果不是这样,用户将使用libsndfile dll看到此错误消息:
"The program can't start because <crt-dll-name>.dll is missing from your computer. Try reinstalling the program to fix this problem. "
为了避免这种情况,您可能需要启用静态CRT库链接。在这种情况下,DLL的大小会略有增加,大小将略有增加,但是您可以重新分配Libsndfile DLL,而无需安装正确的系统CRT库。
CMAKE项目将默认使用动态系统CRT库,就像Visual Studio一样。但是您可以使用ENABLE_STATIC_RUNTIME或CMAKE_MSVC_RUNTIME_LIBRARY选项更改它。
注意:您不能同时使用这两个选项,它将导致配置错误。
如果您的cmake> = 3.15,则应使用CMAKE_MSVC_RUNTIME_LIBRARY选项。
这将启用静态链接:
cmake .. -D"MultiThreaded$<$<CONFIG:Debug>:Debug>"
您可以使用libsndfile ENABLE_STATIC_RUNTIME选项来控制CMAKE项目的CRT库链接: OFF或UNSONE(默认), ON静态链接:
cmake .. -DENABLE_STATIC_RUNTIME=ON
注意:此选项被弃用,并且可能会在以后删除,因为我们现在有标准选项CMAKE_MSVC_RUNTIME_LIBRARY 。
第二个建议是关于OGG,Vorbis Flac和Opus支持。在Windows下搜索外部库有点棘手。最好的方法是使用VCPKG。
安装VCPKG,然后将此参数添加到CMAKE命令行:
-DCMAKE_TOOLCHAIN_FILE=<path-to-vcpkg>/scripts/buildsystems/vcpkg.cmake
如果要使用静态库,则还需要设置VCPKG_TARGET_TRIPLET :
-DVCPKG_TARGET_TRIPLET=x64-windows-static
然后,您需要安装静态libogg,libvorbis,libflac,libopus,mpg123和mp3lame vcpkg软件包。
1.1.0beta2之后,您无需手动安装依赖项。 Libsndfile现在支持VCPKG清单模式,并且所有依赖关系都是自动安装的。
但是,您可以使用命令行使用VCPKG_MANIFEST_MODE参数来关闭清单模式并返回经典模式:
-DVCPKG_MANIFEST_MODE=OFF
在经典模式下,您需要手动安装所需的库:
vcpkg install libvorbis:x64-windows-static libflac:x64-windows-static
opus:x64-windows-static mp3lame:x86-windows-static mpg123:x86-windows-static
libvorbis:x86-windows-static libflac:x86-windows-static
opus:x86-windows-static mp3lame:x86-windows-static mpg123:x86-windows-static
注意:使用必须使用相同的CRT库作为外部库和libsndfile库本身。对于*-static三重态VCPKG使用静态CRT。
有关详细信息,请参见贡献。