O LIBSNDFILE é uma biblioteca C para leitura e gravação de arquivos contendo dados de áudio amostrados.
O projeto LBSNDFILE foi originalmente desenvolvido e mantido por Erik de Castro Lopo [email protected] aka @erikd. O projeto foi desenvolvido no Github em https://github.com/erikd/libsndfile.
Após o lançamento da versão 1.0.30, @erikd transferiu o projeto para a equipe LibsndFile, consulte os autores para obter detalhes.
O repositório de código -fonte canônico para libsndfile está em https://github.com/libsndfile/libsndfile.
Você pode pegar o código -fonte usando:
git clone https://github.com/libsndfile/libsndfile.git
Para a construção do Android, consulte BuildingForAndroid.
Atualmente, existem dois sistemas de construção: o tradicional baseado no GNU AutoTool e o moderno sistema de construção baseado em cmake. O uso do sistema de construção cmake está documentado abaixo.
A configuração de um ambiente de construção para o LBSNDFILE no Debian ou no Ubuntu é tão simples quanto:
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 outras distribuições Linux ou qualquer um dos *BSDs, a configuração deve ser semelhante, embora as ferramentas de instalação do pacote e os nomes de pacotes possam ser um pouco diferentes.
Da mesma forma, no Mac OS X, assumindo que a Brew já esteja instalada:
brew install autoconf autogen automake flac libogg libtool libvorbis opus mpg123 pkg-config
Depois que o ambiente de construção foi configurado, a construção e o teste do LibsndFile é tão simples quanto:
autoreconf -vif
./configure --enable-werror
make
make check
Embora o AutoTools seja a cadeia de ferramentas de construção primária e recomendada, também está disponível o gerador de meta de construção cmake. O processo de construção com CMake ocorre em duas etapas. Primeiro, os arquivos de construção padrão são criados a partir de scripts de configuração. Em seguida, as ferramentas de construção nativas da plataforma são usadas para o edifício real. O CMake pode produzir arquivos de projeto e solução do Microsoft Visual Studio, Unix Makefiles, Xcode Projects e muito mais.
Alguns IDE suportam cmake nativamente ou com plug -ins, verifique a documentação do IDE para obter detalhes.
Existem alguns pacotes recomendados para permitir todos os recursos do LibsndFile:
O CMake pode lidar com construções fora do lugar, permitindo várias construções da mesma árvore de origem e compilação cruzada. A capacidade de construir uma árvore de diretório fora da árvore de origem é um recurso essencial, garantindo que, se um diretório de compilação for removido, os arquivos de origem permanecerão não afetados.
mkdir CMakeBuild
cd CMakeBuild
Em seguida, execute o comando cmake com diretório onde o script cmakelists.txt está localizado como argumento (caminhos relativos são suportados):
cmake ..
Este comando configurará e gravará o script de criação ou solução para o diretório CMakeBuild. O CMake é inteligente o suficiente para criar o Unix Makefiles em Linux ou Visual Studio Solution se você tiver o Visual Studio instalado, mas pode configurar o gerador com o parâmetro -G de linha de comando:
cmake .. -G"Unix Makefiles"
O procedimento de construção depende do gerador selecionado. Com "unix makefiles", você pode digitar:
make & make install
Com o "Visual Studio" e alguns outros geradores, você pode abrir solução ou projetar no diretório CMakeBuild e construir usando o IDE.
Finalmente, você pode usar o comando unificado:
cmake --build .
O CMAKE também fornece GUI cruzada baseada em QT, CMake-Gui. Usá -lo é trivial e não requer explicações detalhadas.
Você pode passar opções adicionais com /D<parameter>=<value> Quando você executa o comando cmake . Algumas opções úteis do sistema:
CMAKE_C_FLAGS - sinalizadores adicionais do compilador CCMAKE_BUILD_TYPE - tipo de configuração, DEBUG , RELEASE , RELWITHDEBINFO ou MINSIZEREL . DEBUG é padrãoCMAKE_INSTALL_PREFIX -construir local de instalação, o mesmo que --prefix opção de configure de scriptOpções úteis do LBSNDFILE:
BUILD_SHARED_LIBS - Build Shared Library (DLL no Windows) Quando ON , construa a biblioteca estática de outra forma. Esta opção está OFF por padrão.
BUILD_PROGRAMS - Construa os utilitários do LBSNDFILE a partir de programs/ diretórios, ON por padrão.
BUILD_EXAMPLES - Construa exemplos, por ON .
BUILD_TESTING - Build Tests. Em seguida, você pode executar testes com o comando ctest , ON por padrão. Definir BUILD_SHARED_LIBS para ON esta opção.
ENABLE_EXTERNAL_LIBS - Ativar suporte ogg, vorbis, FLAC e Opus. Esta opção está disponível e definida como ON se todas as bibliotecas de dependência foram encontradas.
ENABLE_MPEG - Suporte MP3. Esta opção está disponível e definida como ON se todas as bibliotecas de dependência foram encontradas.
ENABLE_BOW_DOCS -Ative o tema de documentação em preto em branco, OFF por padrão.
ENABLE_EXPERIMENTAL - Ativar código experimental. Não use se você não tiver certeza. Esta opção está OFF por padrão.
ENABLE_CPACK - Ative o suporte ao CPACK. Esta opção está ON por padrão.
ENABLE_PACKAGE_CONFIG - Gere e instale o arquivo de configuração do pacote.
INSTALL_PKGCONFIG_MODULE - Gere e instale o módulo PKG -Config.
INSTALL_MANPAGES - Instale páginas MAN para programas. Esta opção está ON por padrão
ENABLE_STATIC_RUNTIME - Ative o tempo de execução estático na plataforma Windows (MSVC e Mingw), OFF por padrão.
NOTA : Para o compilador MSVC, esta opção está depreciada para cmake> = 3,15, consulte Política CMP0091. Use CMAKE_MSVC_RUNTIME_LIBRARY Opção.
Nota : Para Mingw Toolchain, essa opção é experimental. Se você o ativou e depois desativou novamente, precisará limpar o cache cmake (exclua cmakecache.txt).
ENABLE_COMPATIBLE_LIBSNDFILE_NAME - Defina o nome DLL como libsndfile-1.dll (nome canônico) na plataforma Windows, sndfile.dll , caso contrário, OFF por padrão. O nome da biblioteca pode ser diferente, dependendo da plataforma. O conhecido nome da DLL na plataforma Windows é libsndfile-1.dll , porque a única maneira de criar a biblioteca do Windows antes era o Mingw Toolchain com o AutoTools. Esse nome é nativo para o ecossistema Mingw, o AutoTools o constrói usando regras da plataforma Mingw do sndfile Target. Mas quando você constrói com cmake usando o Native Windows Compiler, o nome é sndfile.dll . Este é o nome da plataforma Native Windows, porque o Windows não possui regras de nomeação da biblioteca. É preferido porque você pode pesquisar a biblioteca usando o Package Manager ou o comando find_library do cmake em qualquer plataforma usando o mesmo nome de sndfile .
ENABLE_SSE2 - Adicione o sinalizador do compilador para ativar o SSE2, se necessário, ON por padrão.
Esta opção é apenas para configurações de compiladores compatíveis com X86 e GCC.
Se você compilar para outro conjunto SIMD, por exemplo, Avx2, convém definir ENABLE_SSE2 para OFF .
Nota : Esta opção não está ativa para a configuração X64, porque o SSE2 está sempre disponível neste modo e todas as otimizações são ativadas por padrão.
Opções depreciadas:
DISABLE_EXTERNAL_LIBS - Desative o suporte de Ogg, Vorbis e FLAC. Substituído por ENABLE_EXTERNAL_LIBSBUILD_STATIC_LIBS - Construa biblioteca estática. Use BUILD_SHARED_LIBS em vez disso Primeiro, você precisa adicionar arquivos FindOgg.cmake , FindVorbis.cmake , FindFLAC.cmake e FindOpus.cmake a algum diretório dentro do seu projeto cmake (geralmente cmake ) e adicione -o a CMAKE_MODULE_PATH :
project(SomeApplication)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
Agora você pode pesquisar na biblioteca libsndfile em seus CMakeLists.txt com este comando:
find_package(SndFile)
SndFile_FOUND está ON quando a biblioteca é encontrada.
Se a dependência libsndfile for crítica, você poderá adicionar REQUIRED para find_package :
find_package(SndFile REQUIRED)
Com a opção find_package terá encerrar o processo de configuração se libsndfile não for encontrado.
Você também pode adicionar verificação da versão:
find_package(SndFile 1.0.29)
find_package relatará um erro, se a versão libsndfile for <1.0.29.
Você pode combinar REQUIRED e a versão, se precisar.
Para vincular o uso da biblioteca libsndfile :
target_link_libraries(my_application PRIVATE SndFile::sndfile)
Primeiro conselho sobre as bibliotecas CRT do Visual Studio System, é o código do sistema vinculado como biblioteca estática ou dinâmica a cada aplicativo C.
Você pode encontrar a opção relacionada nas Propriedades do Projeto Visual Studio:
C/C++ -> Code Generation -> Runtime Library
A versão dinâmica da biblioteca System CRT é padrão e significa que o usuário final precisa ter a mesma biblioteca de tempo de execução instalada em seu sistema. Provavelmente é assim, mas se não for, o usuário verá esta mensagem de erro usando o 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 isso, você pode ativar a ligação da Biblioteca CRT estática. Nesse caso, o tamanho da sua DLL aumentará ligeiramente o tamanho aumentará um pouco, mas você pode redistribuir a DLL do LibsndFile sem precisar instalar a versão correta da biblioteca CRT do sistema.
O CMake Project usará as bibliotecas Dynamic System CRT por padrão, assim como o Visual Studio. Mas você pode alterá -lo usando as opções ENABLE_STATIC_RUNTIME ou CMAKE_MSVC_RUNTIME_LIBRARY .
Nota : Você não pode usar as duas opções ao mesmo tempo, isso levará a um erro de configuração.
Se você possui cmake> = 3.15, use CMAKE_MSVC_RUNTIME_LIBRARY opção.
Isso permitirá a ligação estática:
cmake .. -D"MultiThreaded$<$<CONFIG:Debug>:Debug>"
Você pode usar o LBSNDFILE ENABLE_STATIC_RUNTIME Opção para controlar a biblioteca CRT Linking for cMake Project: OFF ou Unset (padrão) para dinâmico e para ON estática:
cmake .. -DENABLE_STATIC_RUNTIME=ON
NOTA : Esta opção está depreciada e pode ser removida em futuro distante, porque temos a opção padrão CMAKE_MSVC_RUNTIME_LIBRARY agora.
O segundo conselho é sobre o apoio de OGG, Vorbis FLAC e Opus. Pesquisar bibliotecas externas no Windows é um pouco complicado. A melhor maneira é usar o vcpkg.
Instale o vcpkg e adicione este parâmetro à linha de comando cmake:
-DCMAKE_TOOLCHAIN_FILE=<path-to-vcpkg>/scripts/buildsystems/vcpkg.cmake
Você também precisa definir VCPKG_TARGET_TRIPLET se quiser usar bibliotecas estáticas:
-DVCPKG_TARGET_TRIPLET=x64-windows-static
Em seguida, você precisa instalar pacotes estático Libogg, Libvorbis, Libflac, Libopus, MPG123 e Mp3Lame VCPKG.
Após 1.1.0beta2, você não precisa instalar dependências manualmente. O LIBSNDFILE agora suporta o modo de manifesto vcpkg e todas as dependências são instaladas automaticamente.
No entanto, você pode desligar o modo de manifesto e retornar ao modo clássico usando o parâmetro VCPKG_MANIFEST_MODE na linha de comando:
-DVCPKG_MANIFEST_MODE=OFF
No modo clássico, você precisa instalar as bibliotecas necessárias 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 : O uso deve usar a mesma biblioteca CRT para bibliotecas externas e a própria biblioteca LibsndFile. Para trigêmeos *-static o vcpkg usa CRT estático.
Consulte Contribuindo.md para obter detalhes.