1b815c7f3Sopenharmony_ci# libsndfile
2b815c7f3Sopenharmony_ci
3b815c7f3Sopenharmony_ci![C/C++ CI](https://github.com/libsndfile/libsndfile/workflows/C/C++%20CI/badge.svg)
4b815c7f3Sopenharmony_ci
5b815c7f3Sopenharmony_cilibsndfile is a C library for reading and writing files containing sampled audio
6b815c7f3Sopenharmony_cidata.
7b815c7f3Sopenharmony_ci
8b815c7f3Sopenharmony_ci## Authors
9b815c7f3Sopenharmony_ci
10b815c7f3Sopenharmony_ciThe libsndfile project was originally developed and maintained by
11b815c7f3Sopenharmony_ciErik de Castro Lopo <erikd@mega-nerd.com> aka @erikd. The project was developed
12b815c7f3Sopenharmony_cion Github at <https://github.com/erikd/libsndfile>.
13b815c7f3Sopenharmony_ci
14b815c7f3Sopenharmony_ciAfter the release of version 1.0.30, @erikd transferred the project to
15b815c7f3Sopenharmony_ci[the libsndfile team](https://github.com/libsndfile), see [AUTHORS](AUTHORS)
16b815c7f3Sopenharmony_cifor details.
17b815c7f3Sopenharmony_ci
18b815c7f3Sopenharmony_ci## Hacking
19b815c7f3Sopenharmony_ci
20b815c7f3Sopenharmony_ciThe canonical source code repository for libsndfile is at
21b815c7f3Sopenharmony_ci<https://github.com/libsndfile/libsndfile>.
22b815c7f3Sopenharmony_ci
23b815c7f3Sopenharmony_ciYou can grab the source code using:
24b815c7f3Sopenharmony_ci
25b815c7f3Sopenharmony_ci    git clone https://github.com/libsndfile/libsndfile.git
26b815c7f3Sopenharmony_ci
27b815c7f3Sopenharmony_ciFor building for Android see [BuildingForAndroid][BuildingForAndroid].
28b815c7f3Sopenharmony_ci
29b815c7f3Sopenharmony_ciThere are currently two build systems: the traditional GNU autotool based one and
30b815c7f3Sopenharmony_cimodern CMake based build system. Use of the CMake build system is documented
31b815c7f3Sopenharmony_cibelow.
32b815c7f3Sopenharmony_ci
33b815c7f3Sopenharmony_ciSetting up a build environment for libsndfile on Debian or Ubuntu is as simple as:
34b815c7f3Sopenharmony_ci
35b815c7f3Sopenharmony_ci    sudo apt install autoconf autogen automake build-essential libasound2-dev \
36b815c7f3Sopenharmony_ci      libflac-dev libogg-dev libtool libvorbis-dev libopus-dev libmp3lame-dev \
37b815c7f3Sopenharmony_ci      libmpg123-dev pkg-config python
38b815c7f3Sopenharmony_ci
39b815c7f3Sopenharmony_ciFor other Linux distributions or any of the *BSDs, the setup should be similar
40b815c7f3Sopenharmony_cialthough the package install tools and package names may be slightly different.
41b815c7f3Sopenharmony_ci
42b815c7f3Sopenharmony_ciSimilarly on Mac OS X, assuming [brew] is already installed:
43b815c7f3Sopenharmony_ci
44b815c7f3Sopenharmony_ci    brew install autoconf autogen automake flac libogg libtool libvorbis opus mpg123 pkg-config
45b815c7f3Sopenharmony_ci
46b815c7f3Sopenharmony_ciOnce the build environment has been set up, building and testing libsndfile is
47b815c7f3Sopenharmony_cias simple as:
48b815c7f3Sopenharmony_ci
49b815c7f3Sopenharmony_ci    autoreconf -vif
50b815c7f3Sopenharmony_ci    ./configure --enable-werror
51b815c7f3Sopenharmony_ci    make
52b815c7f3Sopenharmony_ci    make check
53b815c7f3Sopenharmony_ci
54b815c7f3Sopenharmony_ci## The CMake build system
55b815c7f3Sopenharmony_ci
56b815c7f3Sopenharmony_ciAlthough Autotools is the primary and recommended build toolchain, CMake meta
57b815c7f3Sopenharmony_cibuild generator is also available. The build process with CMake takes
58b815c7f3Sopenharmony_ciplace in two stages. First, standard build files are created from configuration
59b815c7f3Sopenharmony_ciscripts. Then the platform's native build tools are used for the actual
60b815c7f3Sopenharmony_cibuilding. CMake can produce Microsoft Visual Studio project and solution files,
61b815c7f3Sopenharmony_ciUnix Makefiles, Xcode projects and [many more](https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html).
62b815c7f3Sopenharmony_ci
63b815c7f3Sopenharmony_ciSome IDE support CMake natively or with plugins, check you IDE documentation
64b815c7f3Sopenharmony_ci for details.
65b815c7f3Sopenharmony_ci
66b815c7f3Sopenharmony_ci### Requirements
67b815c7f3Sopenharmony_ci
68b815c7f3Sopenharmony_ci1. C99-compliant compiler toolchain (tested with GCC, Clang and Visual
69b815c7f3Sopenharmony_ci   Studio 2015)
70b815c7f3Sopenharmony_ci2. CMake 3.1.3 or newer
71b815c7f3Sopenharmony_ci
72b815c7f3Sopenharmony_ciThere are some recommended packages to enable all features of libsndfile:
73b815c7f3Sopenharmony_ci
74b815c7f3Sopenharmony_ci1. Ogg, Vorbis and FLAC libraries and headers to enable these formats support
75b815c7f3Sopenharmony_ci2. ALSA development package under Linux to build sndfile-play utility
76b815c7f3Sopenharmony_ci3. Sndio development package under BSD to build sndfile-play utility
77b815c7f3Sopenharmony_ci
78b815c7f3Sopenharmony_ci### Building from command line
79b815c7f3Sopenharmony_ci
80b815c7f3Sopenharmony_ciCMake can handle out-of-place builds, enabling several builds from
81b815c7f3Sopenharmony_cithe same source tree, and cross-compilation. The ability to build a directory
82b815c7f3Sopenharmony_citree outside the source tree is a key feature, ensuring that if a build
83b815c7f3Sopenharmony_cidirectory is removed, the source files remain unaffected.
84b815c7f3Sopenharmony_ci
85b815c7f3Sopenharmony_ci    mkdir CMakeBuild
86b815c7f3Sopenharmony_ci    cd CMakeBuild
87b815c7f3Sopenharmony_ci
88b815c7f3Sopenharmony_ciThen run `cmake` command with directory where CMakeLists.txt script is located
89b815c7f3Sopenharmony_cias argument (relative paths are supported):
90b815c7f3Sopenharmony_ci
91b815c7f3Sopenharmony_ci    cmake ..
92b815c7f3Sopenharmony_ci
93b815c7f3Sopenharmony_ciThis command will configure and write build script or solution to CMakeBuild
94b815c7f3Sopenharmony_cidirectory. CMake is smart enough to create Unix makefiles under Linux or Visual
95b815c7f3Sopenharmony_ciStudio solution if you have Visual Studio installed, but you can configure
96b815c7f3Sopenharmony_ci[generator](https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html)
97b815c7f3Sopenharmony_ciwith `-G` command line parameter:
98b815c7f3Sopenharmony_ci
99b815c7f3Sopenharmony_ci    cmake .. -G"Unix Makefiles"
100b815c7f3Sopenharmony_ci
101b815c7f3Sopenharmony_ciThe build procedure depends on the selected generator. With "Unix Makefiles" you
102b815c7f3Sopenharmony_cican type:
103b815c7f3Sopenharmony_ci
104b815c7f3Sopenharmony_ci    make & make install
105b815c7f3Sopenharmony_ci
106b815c7f3Sopenharmony_ciWith "Visual Studio" and some other generators you can open solution or project
107b815c7f3Sopenharmony_cifrom `CMakeBuild` directory and build using IDE.
108b815c7f3Sopenharmony_ci
109b815c7f3Sopenharmony_ciFinally, you can use unified command:
110b815c7f3Sopenharmony_ci
111b815c7f3Sopenharmony_ci    cmake --build .
112b815c7f3Sopenharmony_ci
113b815c7f3Sopenharmony_ciCMake also provides Qt-based cross platform GUI, cmake-gui. Using it is trivial
114b815c7f3Sopenharmony_ciand does not require detailed explanations.
115b815c7f3Sopenharmony_ci
116b815c7f3Sopenharmony_ci### Configuring CMake
117b815c7f3Sopenharmony_ci
118b815c7f3Sopenharmony_ciYou can pass additional options with `/D<parameter>=<value>` when you run
119b815c7f3Sopenharmony_ci`cmake` command. Some useful system options:
120b815c7f3Sopenharmony_ci
121b815c7f3Sopenharmony_ci* `CMAKE_C_FLAGS` - additional C compiler flags
122b815c7f3Sopenharmony_ci* `CMAKE_BUILD_TYPE` - configuration type, `DEBUG`, `RELEASE`, `RELWITHDEBINFO`
123b815c7f3Sopenharmony_ci  or `MINSIZEREL`. `DEBUG` is default
124b815c7f3Sopenharmony_ci* `CMAKE_INSTALL_PREFIX` - build install location, the same as `--prefix` option
125b815c7f3Sopenharmony_ci  of `configure` script
126b815c7f3Sopenharmony_ci
127b815c7f3Sopenharmony_ci Useful libsndfile options:
128b815c7f3Sopenharmony_ci
129b815c7f3Sopenharmony_ci* `BUILD_SHARED_LIBS` - build shared library (DLL under Windows) when `ON`,
130b815c7f3Sopenharmony_ci  build static library othervise. This option is `OFF` by default.
131b815c7f3Sopenharmony_ci* `BUILD_PROGRAMS` - build libsndfile's utilities from `programs/` directory,
132b815c7f3Sopenharmony_ci  `ON` by default.
133b815c7f3Sopenharmony_ci* `BUILD_EXAMPLES` - build examples, `ON` by default.
134b815c7f3Sopenharmony_ci* `BUILD_TESTING` - build tests. Then you can run tests with `ctest` command,
135b815c7f3Sopenharmony_ci  `ON` by default. Setting `BUILD_SHARED_LIBS` to `ON` disables this option.
136b815c7f3Sopenharmony_ci* `ENABLE_EXTERNAL_LIBS` - enable Ogg, Vorbis, FLAC and Opus support. This
137b815c7f3Sopenharmony_ci  option is available and set to `ON` if all dependency libraries were found.
138b815c7f3Sopenharmony_ci* `ENABLE_MPEG` - MP3 support. This option is available and set to `ON` if all
139b815c7f3Sopenharmony_ci  dependency libraries were found.
140b815c7f3Sopenharmony_ci* `ENABLE_CPU_CLIP` - enable tricky cpu specific clipper. Enabled and set to
141b815c7f3Sopenharmony_ci  `ON` when CPU clips negative\positive. Don't touch it if you are not sure
142b815c7f3Sopenharmony_ci* `ENABLE_BOW_DOCS` - enable black-on-white documentation theme, `OFF` by
143b815c7f3Sopenharmony_ci  default.
144b815c7f3Sopenharmony_ci* `ENABLE_EXPERIMENTAL` - enable experimental code. Don't use it if you are
145b815c7f3Sopenharmony_ci  not sure. This option is `OFF` by default.
146b815c7f3Sopenharmony_ci* `ENABLE_CPACK` - enable [CPack](https://cmake.org/cmake/help/latest/module/CPack.html) support.
147b815c7f3Sopenharmony_ci  This option is `ON` by default.
148b815c7f3Sopenharmony_ci* `ENABLE_PACKAGE_CONFIG` - generate and install [package config file](https://cmake.org/cmake/help/latest/manual/cmake-packages.7.html#config-file-packages).
149b815c7f3Sopenharmony_ci* `INSTALL_PKGCONFIG_MODULE` - generate and install [pkg-config module](https://people.freedesktop.org/~dbn/pkg-config-guide.html).
150b815c7f3Sopenharmony_ci* `INSTALL_MANPAGES` - install [man pages](https://en.wikipedia.org/wiki/Man_page) for programs. This option is `ON` by  default
151b815c7f3Sopenharmony_ci* `ENABLE_STATIC_RUNTIME` - enable static runtime on Windows platform (MSVC and
152b815c7f3Sopenharmony_ci  MinGW), `OFF` by default.
153b815c7f3Sopenharmony_ci
154b815c7f3Sopenharmony_ci  **Note**: For MSVC compiler this option is deprecated for CMake >= 3.15, see
155b815c7f3Sopenharmony_ci  policy [CMP0091](https://cmake.org/cmake/help/latest/policy/CMP0091.html).
156b815c7f3Sopenharmony_ci  Use `CMAKE_MSVC_RUNTIME_LIBRARY` option instead.
157b815c7f3Sopenharmony_ci
158b815c7f3Sopenharmony_ci  **Note**: For MinGW toolchain this option is experimental. If you enabled it
159b815c7f3Sopenharmony_ci  and then disabled again, you need to clear CMake cache (delete CMakeCache.txt).
160b815c7f3Sopenharmony_ci* `ENABLE_COMPATIBLE_LIBSNDFILE_NAME` - set DLL name to `libsndfile-1.dll`
161b815c7f3Sopenharmony_ci  (canonical name) on Windows platform, `sndfile.dll` otherwise, `OFF` by
162b815c7f3Sopenharmony_ci  default. Library name can be different depending on platform. The well known
163b815c7f3Sopenharmony_ci  DLL name on Windows platform is `libsndfile-1.dll`, because the only way to
164b815c7f3Sopenharmony_ci  build Windows library before was MinGW toolchain with Autotools. This name
165b815c7f3Sopenharmony_ci  is native for MinGW ecosystem, Autotools constructs it using MinGW platform
166b815c7f3Sopenharmony_ci  rules from `sndfile` target. But when you build with CMake using native
167b815c7f3Sopenharmony_ci  Windows compiler, the name is `sndfile.dll`. This is name for native Windows
168b815c7f3Sopenharmony_ci  platform, because Windows has no library naming rules. It is preffered
169b815c7f3Sopenharmony_ci  because you can search library using package manager or CMake's
170b815c7f3Sopenharmony_ci  `find_library` command on any platform using the same `sndfile` name.
171b815c7f3Sopenharmony_ci
172b815c7f3Sopenharmony_ci* `ENABLE_SSE2` - add compiler flag to enable SSE2 if required, `ON` by default.
173b815c7f3Sopenharmony_ci
174b815c7f3Sopenharmony_ci  This option is for X86 and GCC compatible compilers configurations only.
175b815c7f3Sopenharmony_ci
176b815c7f3Sopenharmony_ci  If you compile for other SIMD set, e.g. AVX2, you may want to set
177b815c7f3Sopenharmony_ci  `ENABLE_SSE2` to `OFF`.
178b815c7f3Sopenharmony_ci
179b815c7f3Sopenharmony_ci  **Note**: This option is not active for X64 configuration, because SSE2 is
180b815c7f3Sopenharmony_ci  always available in this mode and all optimizations are enabled by default.
181b815c7f3Sopenharmony_ci
182b815c7f3Sopenharmony_ciDeprecated options:
183b815c7f3Sopenharmony_ci
184b815c7f3Sopenharmony_ci* `DISABLE_EXTERNAL_LIBS` - disable Ogg, Vorbis and FLAC support. Replaced by
185b815c7f3Sopenharmony_ci  `ENABLE_EXTERNAL_LIBS`
186b815c7f3Sopenharmony_ci* `DISABLE_CPU_CLIP` - disable tricky cpu specific clipper. Replaced by
187b815c7f3Sopenharmony_ci  `ENABLE_CPU_CLIP`
188b815c7f3Sopenharmony_ci* `BUILD_STATIC_LIBS` - build static library. Use `BUILD_SHARED_LIBS` instead
189b815c7f3Sopenharmony_ci
190b815c7f3Sopenharmony_ci### Linking from CMake projects
191b815c7f3Sopenharmony_ci
192b815c7f3Sopenharmony_ciFirst you need to add `FindOgg.cmake`, `FindVorbis.cmake`, `FindFLAC.cmake` and
193b815c7f3Sopenharmony_ci`FindOpus.cmake` files to some directory inside your CMake project (usually
194b815c7f3Sopenharmony_ci`cmake`) and add it to `CMAKE_MODULE_PATH`:
195b815c7f3Sopenharmony_ci
196b815c7f3Sopenharmony_ci    project(SomeApplication)
197b815c7f3Sopenharmony_ci    
198b815c7f3Sopenharmony_ci    list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
199b815c7f3Sopenharmony_ci
200b815c7f3Sopenharmony_ciNow you can search `libsndfile` library from your `CMakeLists.txt`
201b815c7f3Sopenharmony_ci with this command:
202b815c7f3Sopenharmony_ci
203b815c7f3Sopenharmony_ci    find_package(SndFile)
204b815c7f3Sopenharmony_ci
205b815c7f3Sopenharmony_ci`SndFile_FOUND` is set to `ON` when library is found.
206b815c7f3Sopenharmony_ci
207b815c7f3Sopenharmony_ciIf `libsndfile` dependency is critical, you can add `REQUIRED` to
208b815c7f3Sopenharmony_ci `find_package`:
209b815c7f3Sopenharmony_ci
210b815c7f3Sopenharmony_ci    find_package(SndFile REQUIRED)
211b815c7f3Sopenharmony_ci
212b815c7f3Sopenharmony_ciWith with option `find_package` will terminate configuration process
213b815c7f3Sopenharmony_ci if `libsndfile` is not found.
214b815c7f3Sopenharmony_ci
215b815c7f3Sopenharmony_ciYou can also add version check:
216b815c7f3Sopenharmony_ci
217b815c7f3Sopenharmony_ci    find_package(SndFile 1.0.29)
218b815c7f3Sopenharmony_ci
219b815c7f3Sopenharmony_ci`find_package` will report error, if `libsndfile` version is < 1.0.29.
220b815c7f3Sopenharmony_ci
221b815c7f3Sopenharmony_ciYou can combine `REQUIRED` and version if you need.
222b815c7f3Sopenharmony_ci
223b815c7f3Sopenharmony_ciTo link `libsndfile` library use:
224b815c7f3Sopenharmony_ci
225b815c7f3Sopenharmony_ci    target_link_libraries(my_application PRIVATE SndFile::sndfile)
226b815c7f3Sopenharmony_ci
227b815c7f3Sopenharmony_ci### Notes for Windows users
228b815c7f3Sopenharmony_ci
229b815c7f3Sopenharmony_ci#### System CRT library
230b815c7f3Sopenharmony_ci
231b815c7f3Sopenharmony_ciFirst advice about Visual Studio [system CRT libraries](https://docs.microsoft.com/en-us/cpp/c-runtime-library/c-run-time-library-reference?view=vs-2019),
232b815c7f3Sopenharmony_ciit is system code linked as static or dynamic library to every C application.
233b815c7f3Sopenharmony_ci
234b815c7f3Sopenharmony_ciYou can find related option in Visual Studio project properties:
235b815c7f3Sopenharmony_ci
236b815c7f3Sopenharmony_ci    C/C++ -> Code Generation -> Runtime Library
237b815c7f3Sopenharmony_ci
238b815c7f3Sopenharmony_ciDynamic version of system CRT library is default and it means that end user needs
239b815c7f3Sopenharmony_cito have the same runtime library installed on his system. Most likely it is so,
240b815c7f3Sopenharmony_cibut if it is not, the user will see this error message using libsndfile DLL:
241b815c7f3Sopenharmony_ci
242b815c7f3Sopenharmony_ci    "The program can't start because <crt-dll-name>.dll is missing from your computer. Try reinstalling the program to fix this problem. "
243b815c7f3Sopenharmony_ci
244b815c7f3Sopenharmony_ciTo avoid this, you may want to enable static CRT library linking. In this case
245b815c7f3Sopenharmony_cithe size of your DLL will increase slightly the size will increase slightly, but
246b815c7f3Sopenharmony_ciyou can redistribute the libsndfile DLL without having to install the correct
247b815c7f3Sopenharmony_civersion of the system CRT library.
248b815c7f3Sopenharmony_ci
249b815c7f3Sopenharmony_ciCMake project will use dynamic system CRT libraries by default, just like
250b815c7f3Sopenharmony_ciVisual Studio does. But you can change it using `ENABLE_STATIC_RUNTIME` or
251b815c7f3Sopenharmony_ci`CMAKE_MSVC_RUNTIME_LIBRARY` options.
252b815c7f3Sopenharmony_ci
253b815c7f3Sopenharmony_ci**Note**: You cannot use both options at the same time, it will lead to a
254b815c7f3Sopenharmony_ciconfiguration error.
255b815c7f3Sopenharmony_ci
256b815c7f3Sopenharmony_ciIf you have CMake >= 3.15 you should use
257b815c7f3Sopenharmony_ci[`CMAKE_MSVC_RUNTIME_LIBRARY`](https://cmake.org/cmake/help/v3.15/variable/CMAKE_MSVC_RUNTIME_LIBRARY.html) option.
258b815c7f3Sopenharmony_ci
259b815c7f3Sopenharmony_ciThis will enable static linking:
260b815c7f3Sopenharmony_ci
261b815c7f3Sopenharmony_ci    cmake .. -D"MultiThreaded$<$<CONFIG:Debug>:Debug>"
262b815c7f3Sopenharmony_ci
263b815c7f3Sopenharmony_ciYou can use libsndfile `ENABLE_STATIC_RUNTIME` option to to control CRT library
264b815c7f3Sopenharmony_cilinking for CMake project: `OFF` or unset (default) for dynamic, and `ON` for
265b815c7f3Sopenharmony_cistatic linking:
266b815c7f3Sopenharmony_ci
267b815c7f3Sopenharmony_ci    cmake .. -DENABLE_STATIC_RUNTIME=ON
268b815c7f3Sopenharmony_ci
269b815c7f3Sopenharmony_ci**Note**: This option is deprecated and may be removed in far future because we
270b815c7f3Sopenharmony_cihave standard option `CMAKE_MSVC_RUNTIME_LIBRARY` now.
271b815c7f3Sopenharmony_ci
272b815c7f3Sopenharmony_ci#### Using Vcpkg package manager
273b815c7f3Sopenharmony_ci
274b815c7f3Sopenharmony_ciSecond advice is about Ogg, Vorbis FLAC and Opus support. Searching external
275b815c7f3Sopenharmony_cilibraries under Windows is a little bit tricky. The best way is to use
276b815c7f3Sopenharmony_ci[Vcpkg](https://github.com/Microsoft/vcpkg).
277b815c7f3Sopenharmony_ci
278b815c7f3Sopenharmony_ciInstall Vcpkg and then add this parameter to cmake command line:
279b815c7f3Sopenharmony_ci
280b815c7f3Sopenharmony_ci    -DCMAKE_TOOLCHAIN_FILE=<path-to-vcpkg>/scripts/buildsystems/vcpkg.cmake
281b815c7f3Sopenharmony_ci
282b815c7f3Sopenharmony_ciYou also need to set `VCPKG_TARGET_TRIPLET` if you want to use static libraries:
283b815c7f3Sopenharmony_ci
284b815c7f3Sopenharmony_ci    -DVCPKG_TARGET_TRIPLET=x64-windows-static
285b815c7f3Sopenharmony_ci
286b815c7f3Sopenharmony_ciThen you need to install static libogg, libvorbis, libflac, libopus, mpg123 and
287b815c7f3Sopenharmony_cimp3lame Vcpkg packages.
288b815c7f3Sopenharmony_ci
289b815c7f3Sopenharmony_ciAfter 1.1.0beta2 you don't need to install dependencies manually. Libsndfile
290b815c7f3Sopenharmony_cinow supports [Vcpkg manifest mode](https://vcpkg.readthedocs.io/en/latest/users/manifests/)
291b815c7f3Sopenharmony_ciand all dependencies are installed automatically.
292b815c7f3Sopenharmony_ci
293b815c7f3Sopenharmony_ciHowever, you can turn off the manifest mode and return to the classic mode using
294b815c7f3Sopenharmony_cithe `VCPKG_MANIFEST_MODE` parameter from the command line:
295b815c7f3Sopenharmony_ci
296b815c7f3Sopenharmony_ci    -DVCPKG_MANIFEST_MODE=OFF
297b815c7f3Sopenharmony_ci
298b815c7f3Sopenharmony_ciIn classic mode, you need to install the required libraries manually:
299b815c7f3Sopenharmony_ci
300b815c7f3Sopenharmony_ci    vcpkg install libvorbis:x64-windows-static libflac:x64-windows-static
301b815c7f3Sopenharmony_ci    opus:x64-windows-static mp3lame:x86-windows-static mpg123:x86-windows-static
302b815c7f3Sopenharmony_ci    libvorbis:x86-windows-static libflac:x86-windows-static
303b815c7f3Sopenharmony_ci    opus:x86-windows-static mp3lame:x86-windows-static mpg123:x86-windows-static
304b815c7f3Sopenharmony_ci
305b815c7f3Sopenharmony_ci**Note**: Use must use the same CRT library for external libraries and the
306b815c7f3Sopenharmony_cilibsndfile library itself. For `*-static` triplets Vcpkg uses
307b815c7f3Sopenharmony_ci[static CRT](https://vcpkg.readthedocs.io/en/latest/users/triplets/).
308b815c7f3Sopenharmony_ci
309b815c7f3Sopenharmony_ci## Submitting Patches
310b815c7f3Sopenharmony_ci
311b815c7f3Sopenharmony_ciSee [CONTRIBUTING.md](CONTRIBUTING.md) for details.
312b815c7f3Sopenharmony_ci
313b815c7f3Sopenharmony_ci[brew]: http://brew.sh/
314b815c7f3Sopenharmony_ci[github]: http://libsndfile.github.io/libsndfile/
315b815c7f3Sopenharmony_ci[BuildingForAndroid]: https://github.com/libsndfile/libsndfile/blob/master/Building-for-Android.md
316