Libsndfile est une bibliothèque C pour lire et écrire des fichiers contenant des données audio échantillonnées.
Le projet Libsndfile a été initialement développé et entretenu par Erik de Castro lopo [email protected] aka @erikd. Le projet a été développé sur GitHub sur https://github.com/erikd/libsndfile.
Après la sortie de la version 1.0.30, @erikd a transféré le projet à l'équipe LibsndFile, voir les auteurs pour plus de détails.
Le référentiel de code source canonique pour libsndfile est sur https://github.com/libsndfile/libsndfile.
Vous pouvez saisir le code source en utilisant:
git clone https://github.com/libsndfile/libsndfile.git
Pour la construction pour Android, voir BuildingForAndroid.
Il existe actuellement deux systèmes de construction: le système de construction basé sur le GNU Autotool traditionnel et le système de construction moderne basé sur CMake. L'utilisation du système de construction CMake est documentée ci-dessous.
La mise en place d'un environnement de construction pour libsndfile sur Debian ou Ubuntu est aussi simple que:
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
Pour les autres distributions Linux ou l'un des * BSDS, la configuration doit être similaire, bien que les outils d'installation et les noms de package de package puissent être légèrement différents.
De même sur Mac OS X, en supposant que Brew est déjà installé:
brew install autoconf autogen automake flac libogg libtool libvorbis opus mpg123 pkg-config
Une fois l'environnement de construction configuré, construire et tester Libsndfile est aussi simple que:
autoreconf -vif
./configure --enable-werror
make
make check
Bien que AutoTools soit la chaîne d'outils de construction principale et recommandée, le générateur de construction CMake Meta est également disponible. Le processus de construction avec Cmake a lieu en deux étapes. Tout d'abord, les fichiers de construction standard sont créés à partir de scripts de configuration. Ensuite, les outils de construction natifs de la plate-forme sont utilisés pour le bâtiment réel. CMake peut produire des fichiers de projet et de solution Microsoft Visual Studio, Unix Makefiles, Xcode Projects et bien d'autres.
Certains IDE prennent en charge Cmake nativement ou avec des plugins, vérifiez votre documentation IDE pour plus de détails.
Il existe des packages recommandés pour permettre toutes les fonctionnalités de libsndfile:
CMake peut gérer les versions hors de propos, permettant plusieurs constructions à partir du même arbre source et de compilation croisée. La possibilité de construire une arborescence d'annuaire en dehors de l'arborescence source est une caractéristique clé, garantissant que si un répertoire de construction est supprimé, les fichiers source ne sont pas affectés.
mkdir CMakeBuild
cd CMakeBuild
Ensuite, exécutez la commande cmake avec le répertoire où le script cMakelists.txt est situé comme argument (les chemins relatifs sont pris en charge):
cmake ..
Cette commande configure et écrira un script de construction ou une solution au répertoire CMakeBuild. CMake est suffisamment intelligent pour créer Unix MakeFiles sous la solution Linux ou Visual Studio si vous avez installé Visual Studio, mais vous pouvez configurer le générateur avec le paramètre de ligne de commande -G :
cmake .. -G"Unix Makefiles"
La procédure de construction dépend du générateur sélectionné. Avec "Unix Makefiles", vous pouvez taper:
make & make install
Avec "Visual Studio" et d'autres générateurs, vous pouvez ouvrir une solution ou projeter à partir du répertoire CMakeBuild et construire à l'aide d'IDE.
Enfin, vous pouvez utiliser la commande unifiée:
cmake --build .
CMake fournit également une interface graphique à plate-forme transformatrice basée sur QT, CMake-Gui. L'utiliser est trivial et ne nécessite pas d'explications détaillées.
Vous pouvez transmettre des options supplémentaires avec /D<parameter>=<value> lorsque vous exécutez la commande cmake . Quelques options système utiles:
CMAKE_C_FLAGS - indicateurs de compilateur C supplémentairesCMAKE_BUILD_TYPE - Type de configuration, DEBUG , RELEASE , RELWITHDEBINFO ou MINSIZEREL . DEBUG est par défautCMAKE_INSTALL_PREFIX - Créer l'emplacement d'installation, identique à --prefix Option de configure le scriptOptions utiles libsndfile:
BUILD_SHARED_LIBS - bibliothèque partagée Build (DLL sous Windows) Lorsque ON , Build Static Library Sinon. Cette option est OFF par défaut.
BUILD_PROGRAMS - build utilities de libsndfile à partir programs/ répertoire, ON par défaut.
BUILD_EXAMPLES - Build Exemples, ON par défaut.
BUILD_TESTING - Build Tests. Ensuite, vous pouvez exécuter des tests avec la commande ctest , ON par défaut. Le réglage BUILD_SHARED_LIBS sur ON Désactive cette option.
ENABLE_EXTERNAL_LIBS - Activer Ogg, Vorbis, FLAC et OPUS Support. Cette option est disponible et définie sur ON si toutes les bibliothèques de dépendances ont été trouvées.
ENABLE_MPEG - Support MP3. Cette option est disponible et définie sur ON si toutes les bibliothèques de dépendances ont été trouvées.
ENABLE_BOW_DOCS - Activer le thème de documentation noir sur blanc, OFF défaut.
ENABLE_EXPERIMENTAL - Activer le code expérimental. Ne l'utilisez pas si vous n'êtes pas sûr. Cette option est OFF par défaut.
ENABLE_CPACK - Activer le support CPACK. Cette option est ON par défaut.
ENABLE_PACKAGE_CONFIG - générer et installer le fichier de configuration du package.
INSTALL_PKGCONFIG_MODULE - générer et installer le module PKG-Config.
INSTALL_MANPAGES - Installez les pages d'homme pour les programmes. Cette option est ON par défaut
ENABLE_STATIC_RUNTIME - Activer le temps d'exécution statique sur la plate-forme Windows (MSVC et Mingw), OFF défaut.
Remarque : Pour le compilateur MSVC, cette option est obsolète pour CMake> = 3.15, voir la politique CMP0091. Utilisez plutôt l'option CMAKE_MSVC_RUNTIME_LIBRARY .
Remarque : Pour Mingw Toolchain, cette option est expérimentale. Si vous l'avez activé puis désactivé, vous devez effacer le cache Cmake (supprimer cmakecache.txt).
ENABLE_COMPATIBLE_LIBSNDFILE_NAME - Définissez le nom de la DLL sur libsndfile-1.dll (nom canonique) sur la plate-forme Windows, sndfile.dll sinon, OFF par défaut. Le nom de la bibliothèque peut être différent en fonction de la plate-forme. Le nom de DLL bien connu sur la plate-forme Windows est libsndfile-1.dll , car la seule façon de créer la bibliothèque Windows avant était Mingw Toolchain avec AutoTools. Ce nom est originaire de l'écosystème MingW, AutoTools le construit à l'aide de règles de plate-forme Mingw à partir de sndfile Target. Mais lorsque vous construisez avec CMake à l'aide du compilateur Windows natif, le nom est sndfile.dll . Ceci est le nom de la plate-forme Windows native, car Windows n'a pas de règles de dénomination de bibliothèque. Il est préféré car vous pouvez rechercher la bibliothèque à l'aide de Package Manager ou CMake's find_library sur n'importe quelle plate-forme en utilisant le même nom sndfile .
ENABLE_SSE2 - Ajouter un indicateur de compilateur pour activer SSE2 si nécessaire, ON par défaut.
Cette option concerne les configurations de compilateurs compatibles x86 et GCC uniquement.
Si vous compilez pour un autre ensemble SIMD, par exemple AVX2, vous voudrez peut-être OFF ENABLE_SSE2 .
Remarque : Cette option n'est pas active pour la configuration x64, car SSE2 est toujours disponible dans ce mode et toutes les optimisations sont activées par défaut.
Options obsolètes:
DISABLE_EXTERNAL_LIBS - Désactiver le support Ogg, Vorbis et FLAC. Remplacé par ENABLE_EXTERNAL_LIBSBUILD_STATIC_LIBS - bibliothèque statique de construction. Utilisez à la place BUILD_SHARED_LIBS Vous devez d'abord ajouter FindOgg.cmake , FindVorbis.cmake , FindFLAC.cmake et FindOpus.cmake à un répertoire à l'intérieur de votre projet CMake (généralement cmake ) et l'ajouter à CMAKE_MODULE_PATH :
project(SomeApplication)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
Vous pouvez maintenant rechercher la bibliothèque libsndfile à partir de votre CMakeLists.txt avec cette commande:
find_package(SndFile)
SndFile_FOUND est défini ON la bibliothèque.
Si la dépendance libsndfile est critique, vous pouvez ajouter REQUIRED pour find_package :
find_package(SndFile REQUIRED)
Avec l'option find_package terminera le processus de configuration si libsndfile n'est pas trouvé.
Vous pouvez également ajouter la vérification de la version:
find_package(SndFile 1.0.29)
find_package rapportera l'erreur, si la version libsndfile est <1.0.29.
Vous pouvez combiner REQUIRED et version si vous en avez besoin.
Pour lier libsndfile Library Utilisation:
target_link_libraries(my_application PRIVATE SndFile::sndfile)
Premier conseil sur les bibliothèques CRT du système Visual Studio, il est lié au code système comme bibliothèque statique ou dynamique à chaque application C.
Vous pouvez trouver une option connexe dans Visual Studio Project Properties:
C/C++ -> Code Generation -> Runtime Library
La version dynamique de la bibliothèque CRT système est par défaut et cela signifie que l'utilisateur final doit avoir la même bibliothèque d'exécution installée sur son système. Il en est très probablement le cas, mais si ce n'est pas le cas, l'utilisateur verra ce message d'erreur à l'aide de 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. "
Pour éviter cela, vous voudrez peut-être permettre la liaison statique de la bibliothèque CRT. Dans ce cas, la taille de votre DLL augmentera légèrement, la taille augmentera légèrement, mais vous pouvez redistribuer la DLL LibsndFile sans avoir à installer la version correcte de la bibliothèque CRT système.
Le projet CMake utilisera les bibliothèques CRT du système dynamique par défaut, tout comme Visual Studio. Mais vous pouvez le modifier en utilisant les options ENABLE_STATIC_RUNTIME ou CMAKE_MSVC_RUNTIME_LIBRARY .
Remarque : vous ne pouvez pas utiliser les deux options en même temps, cela conduira à une erreur de configuration.
Si vous avez cmake> = 3.15, vous devez utiliser l'option CMAKE_MSVC_RUNTIME_LIBRARY .
Cela permettra une liaison statique:
cmake .. -D"MultiThreaded$<$<CONFIG:Debug>:Debug>"
Vous pouvez utiliser l'option libsndfile ENABLE_STATIC_RUNTIME pour contrôler la liaison de la bibliothèque CRT pour le projet CMake: OFF ou ON (par défaut) pour la dynamique et pour la liaison statique:
cmake .. -DENABLE_STATIC_RUNTIME=ON
Remarque : Cette option est obsolète et peut être supprimée dans de loin l'avenir car nous avons maintenant l'option standard CMAKE_MSVC_RUNTIME_LIBRARY .
Le deuxième conseil concerne le support OGG, Vorbis Flac et Opus. La recherche de bibliothèques externes sous Windows est un peu délicate. La meilleure façon est d'utiliser VCPKG.
Installez VCPKG, puis ajoutez ce paramètre à la ligne de commande CMake:
-DCMAKE_TOOLCHAIN_FILE=<path-to-vcpkg>/scripts/buildsystems/vcpkg.cmake
Vous devez également définir VCPKG_TARGET_TRIPLET si vous souhaitez utiliser des bibliothèques statiques:
-DVCPKG_TARGET_TRIPLET=x64-windows-static
Ensuite, vous devez installer des packages statiques Libogg, Libvorbis, Libflac, Libopus, MPG123 et MP3lame VCPKG.
Après 1.1.0beta2, vous n'avez pas besoin d'installer des dépendances manuellement. LibsndFile prend désormais en charge le mode manifeste VCPKG et toutes les dépendances sont installées automatiquement.
Cependant, vous pouvez désactiver le mode manifeste et revenir au mode classique à l'aide du paramètre VCPKG_MANIFEST_MODE à partir de la ligne de commande:
-DVCPKG_MANIFEST_MODE=OFF
En mode classique, vous devez installer les bibliothèques requises manuellement:
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
Remarque : L'utilisation doit utiliser la même bibliothèque CRT pour les bibliothèques externes et la bibliothèque LibsndFile elle-même. Pour les triplés *-static VCPKG utilise un CRT statique.
Voir contribution.md pour plus de détails.