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。
有關詳細信息,請參見貢獻。