LIBSNDFILE adalah perpustakaan C untuk membaca dan menulis file yang berisi data audio sampel.
Proyek LIBSNDFILE awalnya dikembangkan dan dikelola oleh Erik de Castro lopo [email protected] alias @erikd. Proyek ini dikembangkan di Github di https://github.com/erikd/libsndfile.
Setelah rilis versi 1.0.30, @erikd mentransfer proyek ke tim Libsndfile, lihat penulis untuk detailnya.
Repositori Kode Sumber Canonical untuk Libsndfile ada di https://github.com/libsndfile/libsndfile.
Anda dapat mengambil kode sumber menggunakan:
git clone https://github.com/libsndfile/libsndfile.git
Untuk membangun untuk Android lihat BuildingForAndroid.
Saat ini ada dua sistem build: GNU AutoTool tradisional One dan Modern Cmake Based System. Penggunaan sistem build CMake didokumentasikan di bawah ini.
Menyiapkan Lingkungan Bangunan untuk Libsndfile di Debian atau Ubuntu sesederhana:
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
Untuk distribusi Linux lainnya atau salah satu dari *BSD, pengaturan harus serupa meskipun alat instal paket dan nama paket mungkin sedikit berbeda.
Demikian pula di Mac OS X, dengan asumsi minuman sudah diinstal:
brew install autoconf autogen automake flac libogg libtool libvorbis opus mpg123 pkg-config
Setelah lingkungan pembangunan telah diatur, membangun dan menguji libsndfile sesederhana:
autoreconf -vif
./configure --enable-werror
make
make check
Meskipun AutoTools adalah toolchain build primer dan yang direkomendasikan, CMake Meta Build Generator juga tersedia. Proses pembangunan dengan CMake berlangsung dalam dua tahap. Pertama, file build standar dibuat dari skrip konfigurasi. Kemudian alat pembuatan asli platform digunakan untuk bangunan yang sebenarnya. CMake dapat menghasilkan proyek Microsoft Visual Studio dan file solusi, Unix Makefiles, proyek XCODE dan banyak lagi.
Beberapa IDE mendukung CMake secara asli atau dengan plugin, periksa dokumentasi IDE Anda untuk detailnya.
Ada beberapa paket yang disarankan untuk memungkinkan semua fitur Libsndfile:
CMake dapat menangani bangunan yang tidak ada, memungkinkan beberapa bangunan dari pohon sumber yang sama, dan kompilasi silang. Kemampuan untuk membangun pohon direktori di luar pohon sumber adalah fitur utama, memastikan bahwa jika direktori build dihapus, file sumber tetap tidak terpengaruh.
mkdir CMakeBuild
cd CMakeBuild
Kemudian jalankan perintah cmake dengan direktori di mana skrip cmakelists.txt terletak sebagai argumen (jalur relatif didukung):
cmake ..
Perintah ini akan mengkonfigurasi dan menulis skrip build atau solusi ke direktori cmakeBuild. CMake cukup pintar untuk membuat unix makefiles di bawah solusi Linux atau Visual Studio jika Anda telah menginstal Visual Studio, tetapi Anda dapat mengkonfigurasi generator dengan parameter baris perintah -G :
cmake .. -G"Unix Makefiles"
Prosedur pembuatan tergantung pada generator yang dipilih. Dengan "Unix Makefiles" Anda dapat mengetik:
make & make install
Dengan "Visual Studio" dan beberapa generator lain Anda dapat membuka solusi atau proyek dari CMakeBuild Directory dan membangun menggunakan IDE.
Akhirnya, Anda dapat menggunakan perintah terpadu:
cmake --build .
CMake juga menyediakan platform lintas platform berbasis QT GUI, CMake-Gui. Menggunakannya sepele dan tidak memerlukan penjelasan terperinci.
Anda dapat melewati opsi tambahan dengan /D<parameter>=<value> Saat Anda menjalankan perintah cmake . Beberapa opsi sistem yang berguna:
CMAKE_C_FLAGS - Tambahan C Kompiler BenderaCMAKE_BUILD_TYPE - Jenis konfigurasi, DEBUG , RELEASE , RELWITHDEBINFO atau MINSIZEREL . DEBUG defaultCMAKE_INSTALL_PREFIX -Bangun lokasi instal, sama dengan -opsi --prefix untuk configure skripOpsi Libsndfile yang berguna:
BUILD_SHARED_LIBS - Bangun Perpustakaan Bersama (DLL Di Bawah Windows) Saat ON , membangun pustaka statis sebaliknya. Opsi ini OFF secara default.
BUILD_PROGRAMS - Bangun utilitas libsndfile dari programs/ direktori, secara ON .
BUILD_EXAMPLES - Bangun contoh, ON secara default.
BUILD_TESTING - Bangun tes. Kemudian Anda dapat menjalankan tes dengan perintah ctest , ON secara default. Mengatur BUILD_SHARED_LIBS untuk ON opsi ini.
ENABLE_EXTERNAL_LIBS - Aktifkan dukungan OGG, Vorbis, FLAC dan Opus. Opsi ini tersedia dan ON ke jika semua perpustakaan ketergantungan ditemukan.
ENABLE_MPEG - Dukungan MP3. Opsi ini tersedia dan ON ke jika semua perpustakaan ketergantungan ditemukan.
ENABLE_BOW_DOCS -Aktifkan tema dokumentasi Black-on-White, OFF secara default.
ENABLE_EXPERIMENTAL - Aktifkan kode eksperimental. Jangan gunakan itu jika Anda tidak yakin. Opsi ini OFF secara default.
ENABLE_CPACK - Aktifkan dukungan cpack. Opsi ini ON secara default.
ENABLE_PACKAGE_CONFIG - buat dan instal file konfigurasi paket.
INSTALL_PKGCONFIG_MODULE - Hasilkan dan instal modul PKG -Config.
INSTALL_MANPAGES - Instal Halaman Man untuk program. Opsi ini ON secara default
ENABLE_STATIC_RUNTIME - Aktifkan runtime statis di platform windows (msvc dan mingw), OFF secara default.
Catatan : Untuk kompiler msvc opsi ini sudah usang untuk cmake> = 3.15, lihat kebijakan CMP0091. Gunakan opsi CMAKE_MSVC_RUNTIME_LIBRARY sebagai gantinya.
Catatan : Untuk Mingw Toolchain, opsi ini bersifat eksperimental. Jika Anda mengaktifkannya dan kemudian dinonaktifkan lagi, Anda perlu menghapus cache CMake (hapus cmakecache.txt).
ENABLE_COMPATIBLE_LIBSNDFILE_NAME - atur nama dll ke libsndfile-1.dll (nama kanonik) di platform windows, sndfile.dll sebaliknya, OFF secara default. Nama perpustakaan bisa berbeda tergantung pada platform. Nama DLL yang terkenal di platform Windows adalah libsndfile-1.dll , karena satu-satunya cara untuk membangun perpustakaan Windows sebelumnya adalah Mingw Toolchain dengan AutoTools. Nama ini asli untuk ekosistem MINGW, AutoTools membangunnya menggunakan aturan platform MINGW dari sndfile Target. Tetapi ketika Anda membangun dengan cmake menggunakan kompiler windows asli, namanya sndfile.dll . Ini adalah nama untuk platform Windows asli, karena Windows tidak memiliki aturan penamaan perpustakaan. Lebih disukai karena Anda dapat mencari perpustakaan menggunakan Paket Manajer atau perintah CMAKE find_library pada platform apa pun menggunakan nama sndfile yang sama.
ENABLE_SSE2 - tambahkan bendera kompiler untuk mengaktifkan sse2 jika diperlukan, ON secara default.
Opsi ini hanya untuk konfigurasi kompiler kompatibel x86 dan GCC saja.
Jika Anda mengkompilasi untuk set SIMD lainnya, misalnya AVX2, Anda mungkin ingin mengatur ENABLE_SSE2 untuk OFF .
Catatan : Opsi ini tidak aktif untuk konfigurasi x64, karena SSE2 selalu tersedia dalam mode ini dan semua optimisasi diaktifkan secara default.
Opsi yang sudah usang:
DISABLE_EXTERNAL_LIBS - Nonaktifkan dukungan OGG, VORBIS dan FLAC. Digantikan oleh ENABLE_EXTERNAL_LIBSBUILD_STATIC_LIBS - Bangun perpustakaan statis. Gunakan BUILD_SHARED_LIBS sebagai gantinya Pertama, Anda perlu menambahkan FindOgg.cmake , FindVorbis.cmake , FindFLAC.cmake dan FindOpus.cmake file ke beberapa direktori di dalam proyek cmake Anda (biasanya cmake ) dan menambahkannya ke CMAKE_MODULE_PATH :
project(SomeApplication)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
Sekarang Anda dapat mencari perpustakaan libsndfile dari CMakeLists.txt dengan perintah ini:
find_package(SndFile)
SndFile_FOUND ON ke saat perpustakaan ditemukan.
Jika ketergantungan libsndfile sangat penting, Anda dapat menambahkan REQUIRED untuk find_package :
find_package(SndFile REQUIRED)
Dengan dengan opsi find_package akan mengakhiri proses konfigurasi jika libsndfile tidak ditemukan.
Anda juga dapat menambahkan pemeriksaan versi:
find_package(SndFile 1.0.29)
find_package akan melaporkan kesalahan, jika versi libsndfile adalah <1.0.29.
Anda dapat menggabungkan REQUIRED dan versi jika Anda butuhkan.
Untuk menautkan libsndfile Library Gunakan:
target_link_libraries(my_application PRIVATE SndFile::sndfile)
Saran pertama tentang pustaka CRT sistem studio visual, ini adalah kode sistem yang ditautkan sebagai pustaka statis atau dinamis untuk setiap aplikasi C.
Anda dapat menemukan opsi terkait di Properti Proyek Visual Studio:
C/C++ -> Code Generation -> Runtime Library
Versi dinamis dari System CRT Library default dan itu berarti bahwa pengguna akhir perlu memiliki pustaka runtime yang sama diinstal pada sistemnya. Kemungkinan besar memang demikian, tetapi jika tidak, pengguna akan melihat pesan kesalahan ini menggunakan 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. "
Untuk menghindari hal ini, Anda mungkin ingin mengaktifkan tautan perpustakaan CRT statis. Dalam hal ini ukuran DLL Anda akan sedikit meningkat ukurannya akan sedikit meningkat, tetapi Anda dapat mendistribusikan kembali libsndfile DLL tanpa harus menginstal versi yang benar dari pustaka Sistem CRT.
Proyek CMake akan menggunakan pustaka Sistem Dinamis CRT secara default, seperti halnya Visual Studio. Tetapi Anda dapat mengubahnya menggunakan opsi ENABLE_STATIC_RUNTIME atau CMAKE_MSVC_RUNTIME_LIBRARY .
Catatan : Anda tidak dapat menggunakan kedua opsi secara bersamaan, itu akan menyebabkan kesalahan konfigurasi.
Jika Anda memiliki cmake> = 3.15 Anda harus menggunakan opsi CMAKE_MSVC_RUNTIME_LIBRARY .
Ini akan memungkinkan tautan statis:
cmake .. -D"MultiThreaded$<$<CONFIG:Debug>:Debug>"
Anda dapat menggunakan opsi LIBSNDFile ENABLE_STATIC_RUNTIME untuk mengontrol perpustakaan CRT yang menghubungkan untuk proyek CMake: OFF atau tidak (default) untuk dinamis, dan ON untuk tautan statis:
cmake .. -DENABLE_STATIC_RUNTIME=ON
Catatan : Opsi ini sudah usang dan dapat dihapus di masa depan karena kami memiliki opsi standar CMAKE_MSVC_RUNTIME_LIBRARY SEKARANG.
Saran kedua adalah tentang dukungan Ogg, Vorbis FLAC dan Opus. Mencari pustaka eksternal di bawah Windows sedikit rumit. Cara terbaik adalah dengan menggunakan VCPKG.
Instal vcpkg dan kemudian tambahkan parameter ini ke baris perintah cmake:
-DCMAKE_TOOLCHAIN_FILE=<path-to-vcpkg>/scripts/buildsystems/vcpkg.cmake
Anda juga perlu mengatur VCPKG_TARGET_TRIPLET jika Anda ingin menggunakan pustaka statis:
-DVCPKG_TARGET_TRIPLET=x64-windows-static
Maka Anda perlu menginstal libogg statis, libvorbis, libflac, libopus, mpg123 dan paket vcpkg mp3lame.
Setelah 1.1.0Beta2 Anda tidak perlu menginstal dependensi secara manual. LIBSNDFILE sekarang mendukung mode manifes VCPKG dan semua dependensi diinstal secara otomatis.
Namun, Anda dapat mematikan mode manifes dan kembali ke mode klasik menggunakan parameter VCPKG_MANIFEST_MODE dari baris perintah:
-DVCPKG_MANIFEST_MODE=OFF
Dalam mode klasik, Anda perlu menginstal pustaka yang diperlukan secara manual:
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
Catatan : Penggunaan harus menggunakan pustaka CRT yang sama untuk pustaka eksternal dan pustaka libsndfile itu sendiri. Untuk kembar tiga *-static vcpkg menggunakan crt statis.
Lihat Kontribusi.MD untuk detailnya.