LibsndFile es una biblioteca C para leer y escribir archivos que contienen datos de audio muestreados.
El proyecto LibsndFile fue desarrollado y mantenido originalmente por Erik de Castro Lopo [email protected], también conocido como @erikd. El proyecto se desarrolló en GitHub en https://github.com/erikd/libsndfile.
Después del lanzamiento de la versión 1.0.30, @erikd transfirió el proyecto al equipo de LibsndFile, consulte Autores para obtener más detalles.
El repositorio de código fuente canónico para libsndfile está en https://github.com/libsndfile/libsndfile.
Puede tomar el código fuente usando:
git clone https://github.com/libsndfile/libsndfile.git
Para la construcción de Android, ver BuildingForAndroid.
Actualmente hay dos sistemas de compilación: el tradicional sistema de compilación basado en GNU AutoTool y moderno basado en CMake. El uso del sistema de compilación Cmake se documenta a continuación.
Configurar un entorno de construcción para libsndfile en Debian o Ubuntu es tan simple como:
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
Para otras distribuciones de Linux o cualquiera de los *BSD, la configuración debe ser similar, aunque las herramientas de instalación del paquete y los nombres de los paquetes pueden ser ligeramente diferentes.
De manera similar en Mac OS X, suponiendo que Brew ya esté instalado:
brew install autoconf autogen automake flac libogg libtool libvorbis opus mpg123 pkg-config
Una vez que se ha establecido el entorno de compilación, construir y probar libsndfile es tan simple como:
autoreconf -vif
./configure --enable-werror
make
make check
Aunque AutoTools es la cadena de herramientas de construcción principal y recomendada, CMake Meta Build Generator también está disponible. El proceso de compilación con Cmake tiene lugar en dos etapas. Primero, los archivos de compilación estándar se crean a partir de scripts de configuración. Luego, las herramientas de compilación nativas de la plataforma se utilizan para el edificio real. CMake puede producir proyectos de Microsoft Visual Studio y archivos de solución, Unix Makefiles, proyectos XCode y muchos más.
Algunos IDE admiten CMake de forma nativa o con complementos, verifique su documentación IDE para obtener más detalles.
Hay algunos paquetes recomendados para habilitar todas las características de Libsndfile:
CMake puede manejar compilaciones fuera del lugar, lo que permite varias compilaciones del mismo árbol de origen y compilación cruzada. La capacidad de construir un árbol de directorio fuera del árbol de origen es una característica clave, asegurando que si se elimina un directorio de compilación, los archivos de origen no se ven afectados.
mkdir CMakeBuild
cd CMakeBuild
Luego ejecute el comando cmake con el directorio donde cmakelists.txt script se encuentra como argumento (se admiten las rutas relativas):
cmake ..
Este comando configurará y escribirá script o solución de compilación para el directorio CMakeBuild. CMake es lo suficientemente inteligente como para crear Unix Makefiles en Linux o Solución de Visual Studio si tiene Instalado Visual Studio, pero puede configurar el generador con el parámetro de línea de comandos -G :
cmake .. -G"Unix Makefiles"
El procedimiento de compilación depende del generador seleccionado. Con "Unix Makefiles" puedes escribir:
make & make install
Con "Visual Studio" y algunos otros generadores, puede abrir una solución o proyectar desde el directorio CMakeBuild y construir usando IDE.
Finalmente, puede usar el comando unificado:
cmake --build .
CMake también proporciona GUI cruzada basada en QT, CMake-Gui. Usarlo es trivial y no requiere explicaciones detalladas.
Puede pasar opciones adicionales con /D<parameter>=<value> cuando ejecuta el comando cmake . Algunas opciones de sistema útiles:
CMAKE_C_FLAGS - Banderas de compilador C adicionalesCMAKE_BUILD_TYPE - Tipo de configuración, DEBUG , RELEASE , RELWITHDEBINFO o MINSIZEREL . DEBUG es predeterminadaCMAKE_INSTALL_PREFIX : construir ubicación de instalación, lo mismo que la opción --prefix de configure scriptOpciones útiles de archivos libsnd:
BUILD_SHARED_LIBS - Build Biblioteca compartida (DLL debajo de Windows) Cuando ON , construya la biblioteca estática de lo contrario. Esta opción está OFF de forma predeterminada.
BUILD_PROGRAMS : construya las utilidades de LibsndFile a partir de programs/ directorio, por ON .
BUILD_EXAMPLES : construir ejemplos, ON por defecto.
BUILD_TESTING - Build Tests. Luego puede ejecutar pruebas con el comando ctest , ON de forma predeterminada. Configuración BUILD_SHARED_LIBS en ON esta opción.
ENABLE_EXTERNAL_LIBS - Habilitar OGG, Vorbis, FLAC y soporte de Opus. Esta opción está disponible y se ON en si se encontraron todas las bibliotecas de dependencia.
ENABLE_MPEG - Soporte MP3. Esta opción está disponible y se ON en si se encontraron todas las bibliotecas de dependencia.
ENABLE_BOW_DOCS : habilitar el tema de documentación negro sobre blancos, OFF de forma predeterminada.
ENABLE_EXPERIMENTAL - Habilitar código experimental. No lo use si no está seguro. Esta opción está OFF de forma predeterminada.
ENABLE_CPACK : habilitar el soporte CPACK. Esta opción está ON de forma predeterminada.
ENABLE_PACKAGE_CONFIG : genere e instale el archivo de configuración del paquete.
INSTALL_PKGCONFIG_MODULE : genere e instale el módulo PKG -Config.
INSTALL_MANPAGES : instale páginas de hombre para programas. Esta opción está ON de forma predeterminada
ENABLE_STATIC_RUNTIME : habilita el tiempo de ejecución estática en la plataforma Windows (MSVC y MINGW), OFF de forma predeterminada.
Nota : Para el compilador MSVC, esta opción está en desuso para CMake> = 3.15, consulte la política CMP0091. Use la opción CMAKE_MSVC_RUNTIME_LIBRARY en su lugar.
Nota : Para la cadena de herramientas MINGW, esta opción es experimental. Si lo habilitó y luego se deshabilita nuevamente, debe borrar CMAKE CACHE (eliminar cmakecache.txt).
ENABLE_COMPATIBLE_LIBSNDFILE_NAME - Establezca el nombre de DLL en libsndfile-1.dll (nombre canónico) en la plataforma de Windows, sndfile.dll de lo contrario, OFF de forma predeterminada. El nombre de la biblioteca puede ser diferente según la plataforma. El conocido nombre de DLL en la plataforma Windows es libsndfile-1.dll , porque la única forma de construir la biblioteca de Windows antes era Mingw Toolchain con AutoTools. Este nombre es nativo para el ecosistema MINGW, AutoTools lo construye utilizando reglas de plataforma MingW de sndfile Target. Pero cuando construye con CMake usando el compilador de Windows nativo, el nombre es sndfile.dll . Este es un nombre para la plataforma Native Windows, porque Windows no tiene reglas de nombres de biblioteca. Se prefiere porque puede buscar en la biblioteca utilizando el administrador de paquetes o el comando find_library de CMake en cualquier plataforma utilizando el mismo nombre sndfile .
ENABLE_SSE2 : agregue el indicador del compilador para habilitar SSE2 si es necesario, ON de forma predeterminada.
Esta opción es solo para configuraciones de compiladores compatibles con X86 y GCC.
Si compila para otro conjunto SIMD, por ejemplo, AVX2, es posible que desee establecer ENABLE_SSE2 en OFF .
Nota : Esta opción no está activa para la configuración X64, porque SSE2 siempre está disponible en este modo y todas las optimizaciones están habilitadas de forma predeterminada.
Opciones desactivadas:
DISABLE_EXTERNAL_LIBS - Desactivar el soporte OGG, Vorbis y FLAC. Reemplazado por ENABLE_EXTERNAL_LIBSBUILD_STATIC_LIBS - Build Static Library. Use BUILD_SHARED_LIBS en su lugar Primero debe agregar FindOgg.cmake , FindVorbis.cmake , FindFLAC.cmake y FindOpus.cmake a algún directorio dentro de su proyecto CMake (generalmente cmake ) y agréguelo a CMAKE_MODULE_PATH :
project(SomeApplication)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
Ahora puede buscar la biblioteca libsndfile desde su CMakeLists.txt con este comando:
find_package(SndFile)
SndFile_FOUND se establece ON cuando se encuentra la biblioteca.
Si la dependencia libsndfile es crítica, puede agregar REQUIRED a find_package :
find_package(SndFile REQUIRED)
Con la opción find_package terminará el proceso de configuración si no se encuentra libsndfile .
También puede agregar verificación de la versión:
find_package(SndFile 1.0.29)
find_package informará un error, si la versión libsndfile es <1.0.29.
Puede combinar REQUIRED y versión si lo necesita.
Para vincular el uso de la biblioteca libsndfile :
target_link_libraries(my_application PRIVATE SndFile::sndfile)
Primero consejo sobre las bibliotecas CRT del sistema Visual Studio, es el código del sistema vinculado como biblioteca estática o dinámica para cada aplicación C.
Puede encontrar la opción relacionada en las propiedades del proyecto Visual Studio:
C/C++ -> Code Generation -> Runtime Library
La versión dinámica de System CRT Library es predeterminada y significa que el usuario final debe tener la misma biblioteca de tiempo de ejecución instalada en su sistema. Lo más probable es que sea así, pero si no es así, el usuario verá este mensaje de error usando LBSNDFile DLL:
"The program can't start because <crt-dll-name>.dll is missing from your computer. Try reinstalling the program to fix this problem. "
Para evitar esto, es posible que desee habilitar la enlace de la biblioteca CRT estática. En este caso, el tamaño de su DLL aumentará ligeramente el tamaño aumentará ligeramente, pero puede redistribuir la DLL LibsndFile sin tener que instalar la versión correcta de la biblioteca System CRT.
El proyecto CMAKE utilizará bibliotecas Dynamic System CRT de forma predeterminada, al igual que Visual Studio. Pero puede cambiarlo usando ENABLE_STATIC_RUNTIME o CMAKE_MSVC_RUNTIME_LIBRARY opciones.
Nota : No puede usar ambas opciones al mismo tiempo, conducirá a un error de configuración.
Si tiene CMake> = 3.15, debe usar la opción CMAKE_MSVC_RUNTIME_LIBRARY .
Esto habilitará la vinculación estática:
cmake .. -D"MultiThreaded$<$<CONFIG:Debug>:Debug>"
Puede usar la opción LibsndFile ENABLE_STATIC_RUNTIME para controlar el proyecto de la biblioteca CRT para el proyecto CMake: OFF o ON (predeterminado) para Dynamic, y para vincular estática:
cmake .. -DENABLE_STATIC_RUNTIME=ON
Nota : Esta opción está en desuso y puede eliminarse en un futuro lejano porque tenemos la opción estándar CMAKE_MSVC_RUNTIME_LIBRARY ahora.
El segundo consejo es sobre OGG, Vorbis FLAC y Opus Support. Buscar bibliotecas externas en Windows es un poco complicado. La mejor manera es usar VCPKG.
Instale VCPKG y luego agregue este parámetro a la línea de comandos CMake:
-DCMAKE_TOOLCHAIN_FILE=<path-to-vcpkg>/scripts/buildsystems/vcpkg.cmake
También debe configurar VCPKG_TARGET_TRIPLET si desea usar bibliotecas estáticas:
-DVCPKG_TARGET_TRIPLET=x64-windows-static
Luego debe instalar los paquetes estáticos de Libogg, libvorbis, libflac, libopus, mpg123 y mp3lame vcpkg.
Después de 1.1.0beta2 no necesita instalar dependencias manualmente. Libsndfile ahora admite el modo de manifiesto VCPKG y todas las dependencias se instalan automáticamente.
Sin embargo, puede apagar el modo de manifiesto y volver al modo clásico utilizando el parámetro VCPKG_MANIFEST_MODE de la línea de comando:
-DVCPKG_MANIFEST_MODE=OFF
En el modo clásico, debe instalar las bibliotecas requeridas manualmente:
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
Nota : Uso debe usar la misma biblioteca CRT para bibliotecas externas y la biblioteca Libsndfile en sí. Para *-static , VCPKG usa CRT estática.
Ver contribuyente.md para más detalles.