libsndfileは、サンプリングされたオーディオデータを含むファイルを読み書きするためのCライブラリです。
Libsndfileプロジェクトは、もともとErik de Castro Lopo [email protected]によって開発および維持されました。このプロジェクトは、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を参照してください。
現在、2つのビルドシステムがあります。従来のGNU AutoToolベースの1つと最新のCmakeベースのビルドシステムです。 Cmakeビルドシステムの使用を以下に文書化します。
DebianまたはUbuntuで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 Buildジェネレーターも利用できます。 Cmakeを使用したビルドプロセスは、2つの段階で行われます。まず、標準ビルドファイルは構成スクリプトから作成されます。次に、プラットフォームのネイティブビルドツールが実際の建物に使用されます。 Cmakeは、Microsoft Visual Studioプロジェクトとソリューションファイル、Unix MakeFiles、Xcode Projectなどを作成できます。
一部のIDEサポートは、ネイティブまたはプラグインを使用して、詳細についてはIDEドキュメントを確認してください。
libsndfileのすべての機能を有効にするための推奨パッケージがいくつかあります。
Cmakeは、同じソースツリーからいくつかのビルドを可能にし、相互コンパイルを可能にする場所ではないビルドを処理できます。ソースツリーの外側にディレクトリツリーを構築する機能が重要な機能であり、ビルドディレクトリが削除された場合、ソースファイルが影響を受けないようにします。
mkdir CMakeBuild
cd CMakeBuild
次に、cmakeLists.txtスクリプトが引数として配置されているディレクトリでcmakeコマンドを実行します(相対パスがサポートされています):
cmake ..
このコマンドは、cmakeBuildディレクトリにビルドスクリプトまたはソリューションを構成および書き込みます。 Cmakeは、Visual Studioがインストールされている場合、LinuxまたはVisual Studioソリューションの下にUnix MakeFilesを作成するのに十分なほどスマートですが、 -Gコマンドラインパラメーターを使用してジェネレーターを構成できます。
cmake .. -G"Unix Makefiles"
ビルド手順は、選択したジェネレーターによって異なります。 「unix makefiles」を使用すると、次のように入力できます。
make & make install
「Visual Studio」およびその他のジェネレーターを使用すると、 CMakeBuildディレクトリからソリューションを開くか、IDEを使用してビルドできます。
最後に、統一コマンドを使用できます。
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 [ configure ]を--prefixします。便利なlibsndfileオプション:
BUILD_SHARED_LIBS -build on ride on on ride in ON static library libraryを作成します。このオプションはデフォルトでOFFなっています。
BUILD_PROGRAMSデフォルトで、 programs/ディレクトリからlibsndfileのユーティリティをONします。
BUILD_EXAMPLES ONでbuildの例。
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プログラム用にMANページをインストールします。このオプションはデフォルトでONなっています
ENABLE_STATIC_RUNTIMEデフォルトでは、Windowsプラットフォーム(MSVCおよびMINGW)で静的ランタイムを有効OFFします。
注:MSVCコンパイラの場合、このオプションはcmake> = 3.15に対して非推奨です。ポリシーCMP0091を参照してください。代わりにCMAKE_MSVC_RUNTIME_LIBRARYオプションを使用します。
注:MINGWツールチェーンの場合、このオプションは実験的です。それを有効にしてから再度無効にした場合、Cmakeキャッシュをクリアする必要があります(cmakecache.txtを削除)。
ENABLE_COMPATIBLE_LIBSNDFILE_NAME -dll名をWindowsプラットフォーム上のsndfile.dll libsndfile-1.dll (canonical name)に設定しOFF 。ライブラリ名は、プラットフォームによって異なる場合があります。 Windowsプラットフォームのよく知られているDLL名はlibsndfile-1.dllです。これは、以前のWindowsライブラリを構築する唯一の方法はMingw Toolchainを使用したものだからです。この名前はMINGWエコシステムのネイティブであり、AutoToolsはsndfileターゲットのMINGWプラットフォームルールを使用して構築します。ただし、ネイティブWindowsコンパイラを使用してCmakeで構築すると、名前はsndfile.dllです。 Windowsにはライブラリの命名ルールがないため、これはネイティブWindowsプラットフォームの名前です。同じsndfile名を使用して、任意のプラットフォーム上のパッケージマネージャーまたはcmakeのfind_libraryコマンドを使用してライブラリを検索できるため、それが望ましいです。
ENABLE_SSE2 ONで、必要に応じてSSE2を有効にするためにコンパイラフラグを追加します。
このオプションは、X86およびGCC互換のコンパイラ構成のみです。
他のSIMDセット(AVX2など)をコンパイルする場合、 ENABLE_SSE2 OFFに設定することをお勧めします。
注:SSE2はこのモードで常に利用可能であり、すべての最適化がデフォルトで有効になっているため、このオプションはX64構成ではアクティブではありません。
非推奨オプション:
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)
Optionを使用すると、 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)
Visual Studio System CRTライブラリに関する最初のアドバイスは、すべての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のサイズがわずかに増加しますが、サイズはわずかに増加しますが、システム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またはunset(default)for dynamic、 ON static linkingのCRTライブラリリンクを制御できます。
cmake .. -DENABLE_STATIC_RUNTIME=ON
注:このオプションは非推奨であり、標準のオプションCMAKE_MSVC_RUNTIME_LIBRARYがあるため、遠くに削除される可能性があります。
2番目のアドバイスは、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マニフェストモードをサポートし、すべての依存関係が自動的にインストールされるようになりました。
ただし、コマンドラインから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を使用します。
詳細については、Convributing.mdを参照してください。