Libsndfile - это библиотека C для чтения и написания файлов, содержащих выборки аудиоданте.
Проект libsndfile был первоначально разработан и поддерживается Эриком де Кастро Лопо [email protected] aka @erikd. Проект был разработан на GitHub по адресу https://github.com/erikd/libsndfile.
После выпуска версии 1.0.30 @erikd передал проект команде Libsndfile, см. Авторы для получения подробной информации.
Репозиторий канонического исходного кода для libsndfile находится на https://github.com/libsndfile/libsndfile.
Вы можете взять исходный код, используя:
git clone https://github.com/libsndfile/libsndfile.git
Для строительства для Android см. BuildingForAndroid.
В настоящее время существует две системы сборки: традиционная система на основе AutoTool на основе GNU и современная система сборки Cmake. Использование системы сборки Cmake задокументировано ниже.
Настроить среду сборки для Libsndfile на Debian или Ubuntu так же проста, как:
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 или любого из *BSDS настройка должна быть аналогичной, хотя инструменты установки пакета и имена пакетов могут немного отличаться.
Точно так же на Mac OS X, предполагая, что пиво уже установлено:
brew install autoconf autogen automake flac libogg libtool libvorbis opus mpg123 pkg-config
Как только среда сборки была установлена, строительство и тестирование libsndfile так же просто, как:
autoreconf -vif
./configure --enable-werror
make
make check
Хотя AutoTools является основным и рекомендуемым набором инструментов сборки, также доступен генератор Meta Meta Cmake. Процесс сборки с Cmake происходит в двух этапах. Во -первых, стандартные файлы сборки создаются из сценариев конфигурации. Затем нативные инструменты сборки платформы используются для фактического здания. Cmake может создавать файлы проекта Microsoft Visual Studio и решений, Unix Makefiles, проекты XCode и многое другое.
Некоторые IDE поддерживают Cmake Nangy или с плагинами, проверьте документацию IDE для получения подробной информации.
Есть несколько рекомендуемых пакетов, чтобы обеспечить все особенности libsndfile:
Cmake может обрабатывать на выявленные сборки, обеспечивая несколько сборок из того же дерева источника и перекрестного компиляции. Возможность создания дерева каталогов за пределами исходного дерева является ключевой функцией, гарантируя, что если каталог сборки удаляется, исходные файлы остаются незатронутыми.
mkdir CMakeBuild
cd CMakeBuild
Затем запустите команду cmake с каталогом, где сценарий cmakelists.txt находится в качестве аргумента (поддерживаются относительные пути):
cmake ..
Эта команда будет настроить и записать сценарий сборки или решения для каталога CmakeBuild. Cmake достаточно умный для создания Unix Makefiles в рамках решения Linux или Visual Studio, если у вас установлен Visual Studio, но вы можете настроить генератор с параметром командной строки -G :
cmake .. -G"Unix Makefiles"
Процедура сборки зависит от выбранного генератора. С "Unix Makefiles" вы можете ввести:
make & make install
С «Visual Studio» и некоторыми другими генераторами вы можете открыть решение или проект из каталога CMakeBuild и создать с помощью IDE.
Наконец, вы можете использовать унифицированную команду:
cmake --build .
Cmake также предоставляет Gui на основе QT Cross Platerial Gui, Cmake-Gui. Использование это тривиально и не требует подробных объяснений.
Вы можете передать дополнительные параметры с /D<parameter>=<value> при запуске команды cmake . Некоторые полезные параметры системы:
CMAKE_C_FLAGS - Дополнительные флаги компилятора CCMAKE_BUILD_TYPE - Тип конфигурации, DEBUG , RELEASE , RELWITHDEBINFO или MINSIZEREL . DEBUG по умолчаниюCMAKE_INSTALL_PREFIX -Расположение построения установки, так же, как --prefix Параметры configure ScriptПолезные варианты libsndfile:
BUILD_SHARED_LIBS - Постройте общую библиотеку (DLL под Windows), когда ON , постройте статическую библиотеку в противном случае. Эта опция OFF по умолчанию.
BUILD_PROGRAMS - Build Libsndfile из programs/ каталога, по ON .
BUILD_EXAMPLES - Build примеры, по ON .
BUILD_TESTING - Испытания на сборку. Затем вы можете запустить тесты с командой ctest по ON . Установка BUILD_SHARED_LIBS для ON этой опции.
ENABLE_EXTERNAL_LIBS - включить поддержку OGG, Vorbis, FLAC и Opus. Эта опция доступна и ON , если были найдены все библиотеки зависимостей.
ENABLE_MPEG - Mp3 Support. Эта опция доступна и ON , если были найдены все библиотеки зависимостей.
ENABLE_BOW_DOCS -Включить тему документации черного на белом, OFF по умолчанию.
ENABLE_EXPERIMENTAL - включить экспериментальный код. Не используйте его, если вы не уверены. Эта опция OFF по умолчанию.
ENABLE_CPACK - включить поддержку CPACK. Эта опция ON по умолчанию.
ENABLE_PACKAGE_CONFIG - генерировать и установить файл конфигурации пакета.
INSTALL_PKGCONFIG_MODULE - генерировать и установить модуль pkg -config.
INSTALL_MANPAGES - Установите Man Pages для программ. Эта опция ON по умолчанию
ENABLE_STATIC_RUNTIME - Включить статическое время выполнения на платформе Windows (MSVC и MINGW), OFF по умолчанию.
Примечание . Для компилятора MSVC эта опция устарела для CMAKE> = 3.15, см. Политику CMP0091. Вместо этого используйте опцию CMAKE_MSVC_RUNTIME_LIBRARY .
Примечание . Для Mingw Toolchain этот вариант экспериментальный. Если вы включили его, а затем снова отключили, вам необходимо очистить кэш Cmake (Delet Cmakecache.txt).
ENABLE_COMPATIBLE_LIBSNDFILE_NAME - Установите имя DLL в libsndfile-1.dll (каноническое имя) на платформе Windows, sndfile.dll В противном случае, по OFF . Имя библиотеки может отличаться в зависимости от платформы. Хорошо известное имя DLL на платформе Windows- libsndfile-1.dll , потому что единственный способ создать библиотеку Windows до Mingw Toolchain с Autotools. Это имя является родным для экосистемы Mingw, AutoTools строит его с использованием правил платформы Mingw от цели sndfile . Но когда вы строите с Cmake, используя Native Windows Compiler, имя sndfile.dll . Это название для нативной платформы Windows, потому что у Windows нет правил именования библиотеки. Это предпочтительнее, потому что вы можете найти библиотеку, используя диспетчер пакетов или команду Cmake find_library на любой платформе, используя то же имя sndfile .
ENABLE_SSE2 - добавьте флаг компилятора, чтобы включить SSE2, если это необходимо, по ON .
Эта опция предназначена только для конфигураций компиляции Compatible Combilaters x86 и GCC.
Если вы компилируете для другого набора SIMD, например, AVX2, вы можете установить ENABLE_SSE2 на OFF .
Примечание . Этот параметр не активен для конфигурации X64, поскольку SSE2 всегда доступен в этом режиме, и все оптимизации включены по умолчанию.
Униженные варианты:
DISABLE_EXTERNAL_LIBS - DISABLE OGG, VORBIS и FLAC. Заменен на ENABLE_EXTERNAL_LIBSBUILD_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)
Теперь вы можете искать библиотеку libsndfile от вашей CMakeLists.txt с этой командой:
find_package(SndFile)
SndFile_FOUND ON , когда библиотека найдена.
Если зависимость libsndfile имеет решающее значение, вы можете добавить REQUIRED для find_package :
find_package(SndFile REQUIRED)
С опцией find_package завершит процесс конфигурации, если libsndfile не найден.
Вы также можете добавить проверку версии:
find_package(SndFile 1.0.29)
find_package сообщит об ошибке, если версия libsndfile будет <1.0.29.
Вы можете объединить REQUIRED и версию, если вам нужно.
Чтобы связать использование библиотеки libsndfile :
target_link_libraries(my_application PRIVATE SndFile::sndfile)
Первый совет о библиотеках CRT Visual Studio System, это системный код, связанный как статическая или динамическая библиотека с каждому приложению C.
Вы можете найти связанный вариант в свойствах проекта Visual Studio:
C/C++ -> Code Generation -> Runtime Library
Динамическая версия системной библиотеки 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 немного увеличится, размер немного увеличится, но вы можете перераспределить DLL Libsndfile, не устанавливая правильную версию библиотеки системы CRT.
Cmake Project будет использовать динамические библиотеки CRT System CRT по умолчанию, как это делает Visual Studio. Но вы можете изменить его, используя параметры ENABLE_STATIC_RUNTIME или CMAKE_MSVC_RUNTIME_LIBRARY .
Примечание . Вы не можете использовать оба параметра одновременно, это приведет к ошибке конфигурации.
Если у вас есть CMAKE> = 3.15, вы должны использовать опцию CMAKE_MSVC_RUNTIME_LIBRARY .
Это позволит статическому связующему:
cmake .. -D"MultiThreaded$<$<CONFIG:Debug>:Debug>"
Вы можете использовать опцию libsndfile ENABLE_STATIC_RUNTIME для управления библиотекой CRT, связывающей для проекта Cmake: OFF или USET (по умолчанию) для динамического и ON для статического связывания:
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
Затем вам нужно установить статические либогг, либворбис, либфлак, либопус, MPG123 и mp3lame VCPKG.
После 1.1.0beta2 вам не нужно устанавливать зависимости вручную. Libsndfile теперь поддерживает режим манифеста VCPKG, и все зависимости устанавливаются автоматически.
Тем не менее, вы можете отключить режим манифеста и вернуться в классический режим, используя параметр 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
Примечание . Использование должно использовать ту же библиотеку CRT для внешних библиотек и саму библиотеку Libsndfile. Для *-static Triplets Vcpkg использует статический CRT.
См. Appling.md для деталей.