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 건물은 Buildingforandroid를 참조하십시오.
현재 두 가지 빌드 시스템이 있습니다. CMAKE 빌드 시스템의 사용은 다음과 같습니다.
데비안 또는 우분투에서 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가 이미 설치되었다고 가정합니다.
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 Project 및 솔루션 파일, UNIX MakeFiles, Xcode 프로젝트 등을 생성 할 수 있습니다.
일부 IDE는 기본적으로 또는 플러그인을 사용하여 CMAKE를 지원하고 자세한 내용은 IDE 문서를 확인하십시오.
libsndfile의 모든 기능을 활성화하기위한 권장 패키지가 있습니다.
CMAKE는 장소 외 빌드를 처리하여 동일한 소스 트리의 여러 빌드와 교차 컴파일을 가능하게합니다. 소스 트리 외부에 디렉토리 트리를 빌드하는 기능은 주요 기능으로 빌드 디렉토리를 제거하면 소스 파일이 영향을받지 않도록합니다.
mkdir CMakeBuild
cd CMakeBuild
그런 다음 cmakelists.txt 스크립트가있는 디렉토리로 cmake 명령을 실행합니다 (상대 경로가 지원됩니다) :
cmake ..
이 명령은 CMakeBuild 디렉토리에 빌드 스크립트 또는 솔루션을 구성하고 작성합니다. CMAKE는 Linux 또는 Visual Studio 솔루션에서 Unix MakeFiles를 만들 수있을 정도로 스마트하여 Visual Studio가 설치되어 있지만 -G 명령 줄 매개 변수로 Generator를 구성 할 수 있습니다.
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 빌드 공유 라이브러리 (Windows 아래 DLL) ON 정적 라이브러리를 빌드하십시오. 이 옵션은 기본적으로 OFF 있습니다.
BUILD_PROGRAMS 기본적으로 programs/ 디렉토리에서 libsndfile의 유틸리티를 ON 하십시오.
BUILD_EXAMPLES 기본적으로 ON 예제.
BUILD_TESTING 빌드 테스트. 그런 다음 ON 으로 ctest 명령으로 테스트를 실행할 수 있습니다. BUILD_SHARED_LIBS ON 로 설정하면이 옵션이 비활성화됩니다.
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 OFF 으로 Windows 플랫폼 (MSVC 및 MingW)에서 정적 런타임을 활성화합니다.
참고 : MSVC 컴파일러의 경우이 옵션은 CMAKE> = 3.15에 대해 더 이상 사용되지 않습니다. 정책 CMP0091을 참조하십시오. 대신 CMAKE_MSVC_RUNTIME_LIBRARY 옵션을 사용하십시오.
참고 : MINGW 도구 체인의 경우이 옵션은 실험적입니다. 활성화 한 다음 다시 비활성화되면 CMAKE 캐시 (CMAKECACHE.TXT 삭제)를 지우십시오.
ENABLE_COMPATIBLE_LIBSNDFILE_NAME Windows 플랫폼에서 libsndfile-1.dll (Canonical Name)에 dll name을 sndfile.dll OFF 설정하십시오. 라이브러리 이름은 플랫폼에 따라 다를 수 있습니다. Windows 플랫폼에서 잘 알려진 DLL 이름은 libsndfile-1.dll 입니다. 이전에 Windows 라이브러리를 구축하는 유일한 방법은 Autotools와 Mingw 도구 체인이었습니다. 이 이름은 Mingw Ecosystem의 경우 기본적이며 Autotools는 sndfile Target의 Mingw 플랫폼 규칙을 사용하여 구성합니다. 그러나 기본 Windows 컴파일러를 사용하여 CMAKE로 빌드하면 이름이 sndfile.dll 입니다. Windows에는 라이브러리 명명 규칙이 없기 때문에 기본 Windows 플랫폼의 이름입니다. 동일한 sndfile 이름을 사용하여 모든 플랫폼에서 패키지 관리자 또는 Cmake의 find_library 명령을 사용하여 라이브러리를 검색 할 수 있기 때문에 선호됩니다.
ENABLE_SSE2 컴파일러 플래그를 추가하여 필요한 경우 ON 으로 SSE2를 활성화하십시오.
이 옵션은 X86 및 GCC 호환 컴파일러 구성에만 해당됩니다.
다른 SIMD 세트 인 EG 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 종속성이 중요하다면 find_package 에 REQUIRED 추가 할 수 있습니다.
find_package(SndFile REQUIRED)
옵션을 find_package 하여 libsndfile 찾을 수없는 경우 구성 프로세스를 종료합니다.
버전 확인을 추가 할 수도 있습니다.
find_package(SndFile 1.0.29)
libsndfile 버전이 <1.0.29 인 경우 find_package 오류를보고합니다.
필요한 경우 REQUIRED 와 버전을 결합 할 수 있습니다.
libsndfile 라이브러리 사용을 연결하려면 :
target_link_libraries(my_application PRIVATE SndFile::sndfile)
Visual Studio System CRT 라이브러리에 대한 첫 번째 조언은 모든 C 응용 프로그램에 정적 또는 동적 라이브러리로 연결된 시스템 코드입니다.
Visual Studio Project 속성에서 관련 옵션을 찾을 수 있습니다.
C/C++ -> Code Generation -> Runtime Library
System 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의 크기가 약간 증가하면 크기가 약간 증가하지만 시스템 CRT 라이브러리의 올바른 버전을 설치하지 않고도 libsndfile dll을 재분배 할 수 있습니다.
CMAKE 프로젝트는 Visual Studio와 마찬가지로 기본적으로 동적 시스템 CRT 라이브러리를 사용합니다. 그러나 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 프로젝트 : OFF 또는 ON (기본값) 및 정적 링크를 위해 CRT 라이브러리 링크를 제어 할 수 있습니다.
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 manifest 모드를 지원하며 모든 종속성이 자동으로 설치됩니다.
그러나 명령 줄에서 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
참고 : 사용은 외부 라이브러리와 LibSndfile 라이브러리 자체에 동일한 CRT 라이브러리를 사용해야합니다. *-static triplets의 경우 VCPKG는 정적 CRT를 사용합니다.
자세한 내용은 Contributing.md를 참조하십시오.