diff --git a/contrib/src/sndfile/fetch_and_patch.bat b/contrib/src/sndfile/fetch_and_patch.bat new file mode 100644 index 0000000000000000000000000000000000000000..333c4b350c88ebaf52600225bde47cc14d6062d3 --- /dev/null +++ b/contrib/src/sndfile/fetch_and_patch.bat @@ -0,0 +1,22 @@ +set BUILD=%SRC%..\build + +set SNDFILE_VERSION=1.0.25 +set SNDFILE_URL=http://www.mega-nerd.com/libsndfile/files/libsndfile-%SNDFILE_VERSION%.tar.gz + +mkdir %BUILD% + +if %USE_CACHE%==1 ( + copy %CACHE_DIR%\libsndfile-%SNDFILE_URL%.tar.gz %cd% +) else ( + %WGET_CMD% %SNDFILE_URL% +) + +7z -y x libsndfile-%SNDFILE_VERSION%.tar.gz && 7z -y x libsndfile-%SNDFILE_VERSION%.tar -o%BUILD% +del libsndfile-%SNDFILE_VERSION%.tar && del libsndfile-%SNDFILE_VERSION%.tar.gz +rename %BUILD%\libsndfile-%SNDFILE_VERSION% sndfile + +cd %BUILD%\sndfile + +%APPLY_CMD% %SRC%\sndfile\vs2017.patch + +cd %SRC% \ No newline at end of file diff --git a/contrib/src/sndfile/vs2017.patch b/contrib/src/sndfile/vs2017.patch new file mode 100644 index 0000000000000000000000000000000000000000..d59d4659ac9bab7d280ec07cd34929f477fd3cf6 --- /dev/null +++ b/contrib/src/sndfile/vs2017.patch @@ -0,0 +1,1265 @@ +--- /dev/null ++++ b/msvc/libsndfile.vcxproj +@@ -0,0 +1,212 @@ ++<?xml version="1.0" encoding="utf-8"?> ++<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> ++ <ItemGroup Label="ProjectConfigurations"> ++ <ProjectConfiguration Include="Debug|Win32"> ++ <Configuration>Debug</Configuration> ++ <Platform>Win32</Platform> ++ </ProjectConfiguration> ++ <ProjectConfiguration Include="Release|Win32"> ++ <Configuration>Release</Configuration> ++ <Platform>Win32</Platform> ++ </ProjectConfiguration> ++ <ProjectConfiguration Include="Debug|x64"> ++ <Configuration>Debug</Configuration> ++ <Platform>x64</Platform> ++ </ProjectConfiguration> ++ <ProjectConfiguration Include="Release|x64"> ++ <Configuration>Release</Configuration> ++ <Platform>x64</Platform> ++ </ProjectConfiguration> ++ </ItemGroup> ++ <PropertyGroup Label="Globals"> ++ <VCProjectVersion>15.0</VCProjectVersion> ++ <ProjectGuid>{98F6F9C2-48F4-4173-83A2-80550A94CF0D}</ProjectGuid> ++ <RootNamespace>libsndfile</RootNamespace> ++ <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion> ++ </PropertyGroup> ++ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> ++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> ++ <ConfigurationType>Application</ConfigurationType> ++ <UseDebugLibraries>true</UseDebugLibraries> ++ <PlatformToolset>v141</PlatformToolset> ++ <CharacterSet>MultiByte</CharacterSet> ++ </PropertyGroup> ++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> ++ <ConfigurationType>StaticLibrary</ConfigurationType> ++ <UseDebugLibraries>false</UseDebugLibraries> ++ <PlatformToolset>v141</PlatformToolset> ++ <WholeProgramOptimization>true</WholeProgramOptimization> ++ <CharacterSet>MultiByte</CharacterSet> ++ </PropertyGroup> ++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> ++ <ConfigurationType>Application</ConfigurationType> ++ <UseDebugLibraries>true</UseDebugLibraries> ++ <PlatformToolset>v141</PlatformToolset> ++ <CharacterSet>MultiByte</CharacterSet> ++ </PropertyGroup> ++ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> ++ <ConfigurationType>StaticLibrary</ConfigurationType> ++ <UseDebugLibraries>false</UseDebugLibraries> ++ <PlatformToolset>v141</PlatformToolset> ++ <WholeProgramOptimization>true</WholeProgramOptimization> ++ <CharacterSet>MultiByte</CharacterSet> ++ </PropertyGroup> ++ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> ++ <ImportGroup Label="ExtensionSettings"> ++ </ImportGroup> ++ <ImportGroup Label="Shared"> ++ </ImportGroup> ++ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> ++ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> ++ </ImportGroup> ++ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> ++ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> ++ </ImportGroup> ++ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> ++ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> ++ </ImportGroup> ++ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> ++ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> ++ </ImportGroup> ++ <PropertyGroup Label="UserMacros" /> ++ <PropertyGroup /> ++ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> ++ <ClCompile> ++ <WarningLevel>Level3</WarningLevel> ++ <Optimization>Disabled</Optimization> ++ <SDLCheck>true</SDLCheck> ++ <ConformanceMode>true</ConformanceMode> ++ </ClCompile> ++ </ItemDefinitionGroup> ++ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> ++ <ClCompile> ++ <WarningLevel>Level3</WarningLevel> ++ <Optimization>Disabled</Optimization> ++ <SDLCheck>true</SDLCheck> ++ <ConformanceMode>true</ConformanceMode> ++ </ClCompile> ++ </ItemDefinitionGroup> ++ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> ++ <ClCompile> ++ <WarningLevel>TurnOffAllWarnings</WarningLevel> ++ <Optimization>MaxSpeed</Optimization> ++ <FunctionLevelLinking>true</FunctionLevelLinking> ++ <IntrinsicFunctions>true</IntrinsicFunctions> ++ <SDLCheck>true</SDLCheck> ++ <ConformanceMode>true</ConformanceMode> ++ <AdditionalIncludeDirectories>$(ProjectDir)../src;$(ProjectDir)../../../../MSVC</AdditionalIncludeDirectories> ++ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> ++ <DisableSpecificWarnings>4224;%(DisableSpecificWarnings)</DisableSpecificWarnings> ++ </ClCompile> ++ <Link> ++ <EnableCOMDATFolding>true</EnableCOMDATFolding> ++ <OptimizeReferences>true</OptimizeReferences> ++ </Link> ++ </ItemDefinitionGroup> ++ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> ++ <ClCompile> ++ <WarningLevel>TurnOffAllWarnings</WarningLevel> ++ <Optimization>MaxSpeed</Optimization> ++ <FunctionLevelLinking>true</FunctionLevelLinking> ++ <IntrinsicFunctions>true</IntrinsicFunctions> ++ <SDLCheck>true</SDLCheck> ++ <ConformanceMode>true</ConformanceMode> ++ <AdditionalIncludeDirectories>$(ProjectDir)../src;$(ProjectDir)../../../../MSVC</AdditionalIncludeDirectories> ++ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_MBCS;%(PreprocessorDefinitions)</PreprocessorDefinitions> ++ <DisableSpecificWarnings>4224;%(DisableSpecificWarnings)</DisableSpecificWarnings> ++ </ClCompile> ++ <Link> ++ <EnableCOMDATFolding>true</EnableCOMDATFolding> ++ <OptimizeReferences>true</OptimizeReferences> ++ </Link> ++ </ItemDefinitionGroup> ++ <ItemGroup> ++ <ClCompile Include="..\src\aiff.c" /> ++ <ClCompile Include="..\src\alaw.c" /> ++ <ClCompile Include="..\src\au.c" /> ++ <ClCompile Include="..\src\audio_detect.c" /> ++ <ClCompile Include="..\src\avr.c" /> ++ <ClCompile Include="..\src\broadcast.c" /> ++ <ClCompile Include="..\src\caf.c" /> ++ <ClCompile Include="..\src\chanmap.c" /> ++ <ClCompile Include="..\src\chunk.c" /> ++ <ClCompile Include="..\src\command.c" /> ++ <ClCompile Include="..\src\common.c" /> ++ <ClCompile Include="..\src\dither.c" /> ++ <ClCompile Include="..\src\double64.c" /> ++ <ClCompile Include="..\src\dwd.c" /> ++ <ClCompile Include="..\src\dwvw.c" /> ++ <ClCompile Include="..\src\file_io.c" /> ++ <ClCompile Include="..\src\flac.c" /> ++ <ClCompile Include="..\src\float32.c" /> ++ <ClCompile Include="..\src\g72x.c" /> ++ <ClCompile Include="..\src\gsm610.c" /> ++ <ClCompile Include="..\src\htk.c" /> ++ <ClCompile Include="..\src\id3.c" /> ++ <ClCompile Include="..\src\ima_adpcm.c" /> ++ <ClCompile Include="..\src\ima_oki_adpcm.c" /> ++ <ClCompile Include="..\src\interleave.c" /> ++ <ClCompile Include="..\src\ircam.c" /> ++ <ClCompile Include="..\src\macbinary3.c" /> ++ <ClCompile Include="..\src\macos.c" /> ++ <ClCompile Include="..\src\mat4.c" /> ++ <ClCompile Include="..\src\mat5.c" /> ++ <ClCompile Include="..\src\mpc2k.c" /> ++ <ClCompile Include="..\src\ms_adpcm.c" /> ++ <ClCompile Include="..\src\nist.c" /> ++ <ClCompile Include="..\src\ogg.c" /> ++ <ClCompile Include="..\src\ogg_pcm.c" /> ++ <ClCompile Include="..\src\ogg_speex.c" /> ++ <ClCompile Include="..\src\ogg_vorbis.c" /> ++ <ClCompile Include="..\src\paf.c" /> ++ <ClCompile Include="..\src\pcm.c" /> ++ <ClCompile Include="..\src\pvf.c" /> ++ <ClCompile Include="..\src\raw.c" /> ++ <ClCompile Include="..\src\rf64.c" /> ++ <ClCompile Include="..\src\rx2.c" /> ++ <ClCompile Include="..\src\sd2.c" /> ++ <ClCompile Include="..\src\sds.c" /> ++ <ClCompile Include="..\src\sndfile.c" /> ++ <ClCompile Include="..\src\strings.c" /> ++ <ClCompile Include="..\src\svx.c" /> ++ <ClCompile Include="..\src\test_audio_detect.c" /> ++ <ClCompile Include="..\src\test_broadcast_var.c" /> ++ <ClCompile Include="..\src\test_conversions.c" /> ++ <ClCompile Include="..\src\test_endswap.c" /> ++ <ClCompile Include="..\src\test_file_io.c" /> ++ <ClCompile Include="..\src\test_float.c" /> ++ <ClCompile Include="..\src\test_ima_oki_adpcm.c" /> ++ <ClCompile Include="..\src\test_log_printf.c" /> ++ <ClCompile Include="..\src\test_main.c" /> ++ <ClCompile Include="..\src\test_strncpy_crlf.c" /> ++ <ClCompile Include="..\src\txw.c" /> ++ <ClCompile Include="..\src\ulaw.c" /> ++ <ClCompile Include="..\src\voc.c" /> ++ <ClCompile Include="..\src\vox_adpcm.c" /> ++ <ClCompile Include="..\src\w64.c" /> ++ <ClCompile Include="..\src\wav.c" /> ++ <ClCompile Include="..\src\wav_w64.c" /> ++ <ClCompile Include="..\src\windows.c" /> ++ <ClCompile Include="..\src\wve.c" /> ++ <ClCompile Include="..\src\xi.c" /> ++ </ItemGroup> ++ <ItemGroup> ++ <None Include="..\src\config.h.in" /> ++ <None Include="..\src\sndfile.h.in" /> ++ </ItemGroup> ++ <ItemGroup> ++ <ClInclude Include="..\src\chanmap.h" /> ++ <ClInclude Include="..\src\common.h" /> ++ <ClInclude Include="..\src\ima_oki_adpcm.h" /> ++ <ClInclude Include="..\src\ogg.h" /> ++ <ClInclude Include="..\src\sfconfig.h" /> ++ <ClInclude Include="..\src\sfendian.h" /> ++ <ClInclude Include="..\src\sf_unistd.h" /> ++ <ClInclude Include="..\src\sndfile.hh" /> ++ <ClInclude Include="..\src\test_main.h" /> ++ <ClInclude Include="..\src\wav_w64.h" /> ++ </ItemGroup> ++ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> ++ <ImportGroup Label="ExtensionTargets"> ++ </ImportGroup> ++</Project> +\ No newline at end of file +--- a/src/common.c ++++ b/src/common.c +@@ -23,7 +23,9 @@ + #include <ctype.h> + #include <math.h> + #include <time.h> ++#ifndef _MSC_VER + #include <sys/time.h> ++#endif + + #include "sndfile.h" + #include "sfendian.h" +--- /dev/null ++++ b/src/config.h +@@ -0,0 +1,324 @@ ++/* src/config.h. Generated from config.h.in by configure. */ ++/* src/config.h.in. Generated from configure.ac by autoheader. */ ++ ++/* Set to 1 if the compile is GNU GCC. */ ++#define COMPILER_IS_GCC 0 ++ ++/* Target processor clips on negative float to int conversion. */ ++#define CPU_CLIPS_NEGATIVE 0 ++ ++/* Target processor clips on positive float to int conversion. */ ++#define CPU_CLIPS_POSITIVE 0 ++ ++/* Target processor is big endian. */ ++#define CPU_IS_BIG_ENDIAN 0 ++ ++/* Target processor is little endian. */ ++#define CPU_IS_LITTLE_ENDIAN 1 ++ ++/* Set to 1 to enable experimental code. */ ++#define ENABLE_EXPERIMENTAL_CODE 0 ++ ++/* Define to 1 if you have the <alsa/asoundlib.h> header file. */ ++/* #undef HAVE_ALSA_ASOUNDLIB_H */ ++ ++/* Define to 1 if you have the <byteswap.h> header file. */ ++/* #undef HAVE_BYTESWAP_H */ ++ ++/* Define to 1 if you have the `calloc' function. */ ++#define HAVE_CALLOC 1 ++ ++/* Define to 1 if you have the `ceil' function. */ ++#define HAVE_CEIL 1 ++ ++/* Set to 1 if S_IRGRP is defined. */ ++#define HAVE_DECL_S_IRGRP 1 ++ ++/* Define to 1 if you have the <dlfcn.h> header file. */ ++#define HAVE_DLFCN_H 0 ++ ++/* Define to 1 if you have the <endian.h> header file. */ ++/* #undef HAVE_ENDIAN_H */ ++ ++/* Will be set to 1 if flac, ogg and vorbis are available. */ ++#define HAVE_EXTERNAL_LIBS 0 ++ ++/* Set to 1 if the compile supports the struct hack. */ ++#define HAVE_FLEXIBLE_ARRAY 0 ++ ++/* Define to 1 if you have the `floor' function. */ ++#define HAVE_FLOOR 1 ++ ++/* Define to 1 if you have the `fmod' function. */ ++#define HAVE_FMOD 1 ++ ++/* Define to 1 if you have the `free' function. */ ++#define HAVE_FREE 1 ++ ++/* Define to 1 if you have the `fstat' function. */ ++#define HAVE_FSTAT 1 ++ ++/* Define to 1 if you have the `fsync' function. */ ++#define HAVE_FSYNC 1 ++ ++/* Define to 1 if you have the `ftruncate' function. */ ++#define HAVE_FTRUNCATE 1 ++ ++/* Define to 1 if you have the `getpagesize' function. */ ++#define HAVE_GETPAGESIZE 0 ++ ++/* Define to 1 if you have the `gettimeofday' function. */ ++#define HAVE_GETTIMEOFDAY 0 ++ ++/* Define to 1 if you have the `gmtime' function. */ ++#define HAVE_GMTIME 0 ++ ++/* Define to 1 if you have the `gmtime_r' function. */ ++#define HAVE_GMTIME_R 0 ++ ++/* Define to 1 if you have the <inttypes.h> header file. */ ++#define HAVE_INTTYPES_H 1 ++ ++/* Define to 1 if you have the `m' library (-lm). */ ++#define HAVE_LIBM 0 ++ ++/* Define to 1 if you have the <locale.h> header file. */ ++#define HAVE_LOCALE_H 0 ++ ++/* Define to 1 if you have the `localtime' function. */ ++#define HAVE_LOCALTIME 1 ++ ++/* Define to 1 if you have the `localtime_r' function. */ ++#define HAVE_LOCALTIME_R 1 ++ ++/* Define if you have C99's lrint function. */ ++#define HAVE_LRINT 1 ++ ++/* Define if you have C99's lrintf function. */ ++#define HAVE_LRINTF 1 ++ ++/* Define to 1 if you have the `lseek' function. */ ++#define HAVE_LSEEK 1 ++ ++/* Define to 1 if you have the `malloc' function. */ ++#define HAVE_MALLOC 1 ++ ++/* Define to 1 if you have the <memory.h> header file. */ ++#define HAVE_MEMORY_H 1 ++ ++/* Define to 1 if you have the `mmap' function. */ ++#define HAVE_MMAP 1 ++ ++/* Define to 1 if you have the `open' function. */ ++#define HAVE_OPEN 1 ++ ++/* Define to 1 if you have the `pipe' function. */ ++#define HAVE_PIPE 1 ++ ++/* Define to 1 if you have the `pread' function. */ ++#define HAVE_PREAD 1 ++ ++/* Define to 1 if you have the `pwrite' function. */ ++#define HAVE_PWRITE 1 ++ ++/* Define to 1 if you have the `read' function. */ ++#define HAVE_READ 1 ++ ++/* Define to 1 if you have the `realloc' function. */ ++#define HAVE_REALLOC 1 ++ ++/* Define to 1 if you have the `setlocale' function. */ ++#define HAVE_SETLOCALE 1 ++ ++/* Define to 1 if you have the <sndio.h> header file. */ ++/* #undef HAVE_SNDIO_H */ ++ ++/* Define to 1 if you have the `snprintf' function. */ ++#define HAVE_SNPRINTF 1 ++ ++/* Set to 1 if you have libsqlite3. */ ++#define HAVE_SQLITE3 0 ++ ++/* Define to 1 if the system has the type `ssize_t'. */ ++#define HAVE_SSIZE_T 1 ++ ++/* Define to 1 if you have the <stdint.h> header file. */ ++#define HAVE_STDINT_H 1 ++ ++/* Define to 1 if you have the <stdlib.h> header file. */ ++#define HAVE_STDLIB_H 1 ++ ++/* Define to 1 if you have the <strings.h> header file. */ ++#define HAVE_STRINGS_H 1 ++ ++/* Define to 1 if you have the <string.h> header file. */ ++#define HAVE_STRING_H 1 ++ ++/* Define to 1 if you have the <sys/stat.h> header file. */ ++#define HAVE_SYS_STAT_H 1 ++ ++/* Define to 1 if you have the <sys/time.h> header file. */ ++#define HAVE_SYS_TIME_H 1 ++ ++/* Define to 1 if you have the <sys/types.h> header file. */ ++#define HAVE_SYS_TYPES_H 1 ++ ++/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */ ++#define HAVE_SYS_WAIT_H 1 ++ ++/* Define to 1 if you have the <unistd.h> header file. */ ++#define HAVE_UNISTD_H 1 ++ ++/* Define to 1 if you have the `vsnprintf' function. */ ++#define HAVE_VSNPRINTF 1 ++ ++/* Define to 1 if you have the `waitpid' function. */ ++#define HAVE_WAITPID 1 ++ ++/* Define to 1 if you have the `write' function. */ ++#define HAVE_WRITE 1 ++ ++/* Define to the sub-directory where libtool stores uninstalled libraries. */ ++#define LT_OBJDIR ".libs/" ++ ++/* Set to 1 if compiling for MacOSX */ ++#define OS_IS_MACOSX 0 ++ ++/* Set to 1 if compiling for Win32 */ ++#define OS_IS_WIN32 1 ++ ++/* Name of package */ ++#define PACKAGE "libsndfile" ++ ++/* Define to the address where bug reports for this package should be sent. */ ++#define PACKAGE_BUGREPORT "sndfile@mega-nerd.com" ++ ++/* Define to the full name of this package. */ ++#define PACKAGE_NAME "libsndfile" ++ ++/* Define to the full name and version of this package. */ ++#define PACKAGE_STRING "libsndfile 1.0.25" ++ ++/* Define to the one symbol short name of this package. */ ++#define PACKAGE_TARNAME "libsndfile" ++ ++/* Define to the home page for this package. */ ++#define PACKAGE_URL "http://www.mega-nerd.com/libsndfile/" ++ ++/* Define to the version of this package. */ ++#define PACKAGE_VERSION "1.0.25" ++ ++/* Set to maximum allowed value of sf_count_t type. */ ++#define SF_COUNT_MAX 0x7FFFFFFFFFFFFFFFLL ++ ++/* The size of `double', as computed by sizeof. */ ++#define SIZEOF_DOUBLE 8 ++ ++/* The size of `float', as computed by sizeof. */ ++#define SIZEOF_FLOAT 4 ++ ++/* The size of `int', as computed by sizeof. */ ++#define SIZEOF_INT 4 ++ ++/* The size of `int64_t', as computed by sizeof. */ ++#define SIZEOF_INT64_T 8 ++ ++/* The size of `loff_t', as computed by sizeof. */ ++/* #undef SIZEOF_LOFF_T */ ++ ++/* The size of `long', as computed by sizeof. */ ++#define SIZEOF_LONG 8 ++ ++/* The size of `long long', as computed by sizeof. */ ++#define SIZEOF_LONG_LONG 8 ++ ++/* The size of `off64_t', as computed by sizeof. */ ++/* #undef SIZEOF_OFF64_T */ ++ ++/* The size of `off_t', as computed by sizeof. */ ++#define SIZEOF_OFF_T 8 ++ ++/* Set to sizeof (long) if unknown. */ ++#define SIZEOF_SF_COUNT_T 8 ++ ++/* The size of `short', as computed by sizeof. */ ++#define SIZEOF_SHORT 2 ++ ++/* The size of `size_t', as computed by sizeof. */ ++#define SIZEOF_SIZE_T 8 ++ ++/* The size of `ssize_t', as computed by sizeof. */ ++#define SIZEOF_SSIZE_T 8 ++ ++/* The size of `void*', as computed by sizeof. */ ++#define SIZEOF_VOIDP 8 ++ ++/* The size of `wchar_t', as computed by sizeof. */ ++#define SIZEOF_WCHAR_T 4 ++ ++/* Define to 1 if you have the ANSI C header files. */ ++#define STDC_HEADERS 1 ++ ++/* Set to long if unknown. */ ++#define TYPEOF_SF_COUNT_T int64_t ++ ++/* Enable extensions on AIX 3, Interix. */ ++#ifndef _ALL_SOURCE ++# define _ALL_SOURCE 1 ++#endif ++/* Enable GNU extensions on systems that have them. */ ++#ifndef _GNU_SOURCE ++# define _GNU_SOURCE 1 ++#endif ++/* Enable threading extensions on Solaris. */ ++#ifndef _POSIX_PTHREAD_SEMANTICS ++# define _POSIX_PTHREAD_SEMANTICS 1 ++#endif ++/* Enable extensions on HP NonStop. */ ++#ifndef _TANDEM_SOURCE ++# define _TANDEM_SOURCE 1 ++#endif ++/* Enable general extensions on Solaris. */ ++#ifndef __EXTENSIONS__ ++# define __EXTENSIONS__ 1 ++#endif ++ ++ ++/* Set to 1 to use the native windows API */ ++#define USE_WINDOWS_API 1 ++ ++/* Version number of package */ ++#define VERSION "1.0.25" ++ ++/* Set to 1 if windows DLL is being built. */ ++#define WIN32_TARGET_DLL 0 ++ ++/* Target processor is big endian. */ ++#define WORDS_BIGENDIAN 0 ++ ++#include <BaseTsd.h> ++typedef SSIZE_T ssize_t; ++#define _USE_MATH_DEFINES ++#include <math.h> ++ ++/* Number of bits in a file offset, on hosts where this is settable. */ ++/* #undef _FILE_OFFSET_BITS */ ++ ++/* Define to make fseeko etc. visible, on some hosts. */ ++/* #undef _LARGEFILE_SOURCE */ ++ ++/* Define for large files, on AIX-style hosts. */ ++/* #undef _LARGE_FILES */ ++ ++/* Define to 1 if on MINIX. */ ++/* #undef _MINIX */ ++ ++/* Define to 2 if the system does not provide POSIX.1 features except with ++ this defined. */ ++/* #undef _POSIX_1_SOURCE */ ++ ++/* Define to 1 if you need to in order for `stat' and other things to work. */ ++/* #undef _POSIX_SOURCE */ ++ ++/* Set to 1 to use C99 printf/snprintf in MinGW. */ ++/* #undef __USE_MINGW_ANSI_STDIO */ +\ No newline at end of file +--- /dev/null ++++ b/src/sndfile.h +@@ -0,0 +1,666 @@ ++/* ++** Copyright (C) 1999-2011Erik de Castro Lopo <erikd@mega-nerd.com> ++** ++** This program is free software; you can redistribute it and/or modify ++** it under the terms of the GNU Lesser General Public License as published by ++** the Free Software Foundation; either version 2.1 of the License, or ++** (at your option) any later version. ++** ++** This program is distributed in the hope that it will be useful, ++** but WITHOUT ANY WARRANTY; without even the implied warranty of ++** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++** GNU Lesser General Public License for more details. ++** ++** You should have received a copy of the GNU Lesser General Public License ++** along with this program; if not, write to the Free Software ++** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++*/ ++ ++/* ++** sndfile.h -- system-wide definitions ++** ++** API documentation is in the doc/ directory of the source code tarball ++** and at http://www.mega-nerd.com/libsndfile/api.html. ++*/ ++ ++#ifndef SNDFILE_H ++#define SNDFILE_H ++ ++/* This is the version 1.0.X header file. */ ++#define SNDFILE_1 ++ ++#include <stdio.h> ++#include <sys/types.h> ++ ++#ifdef __cplusplus ++extern "C" { ++#endif /* __cplusplus */ ++ ++/* The following file types can be read and written. ++** A file type would consist of a major type (ie SF_FORMAT_WAV) bitwise ++** ORed with a minor type (ie SF_FORMAT_PCM). SF_FORMAT_TYPEMASK and ++** SF_FORMAT_SUBMASK can be used to separate the major and minor file ++** types. ++*/ ++ ++enum ++{ /* Major formats. */ ++ SF_FORMAT_WAV = 0x010000, /* Microsoft WAV format (little endian default). */ ++ SF_FORMAT_AIFF = 0x020000, /* Apple/SGI AIFF format (big endian). */ ++ SF_FORMAT_AU = 0x030000, /* Sun/NeXT AU format (big endian). */ ++ SF_FORMAT_RAW = 0x040000, /* RAW PCM data. */ ++ SF_FORMAT_PAF = 0x050000, /* Ensoniq PARIS file format. */ ++ SF_FORMAT_SVX = 0x060000, /* Amiga IFF / SVX8 / SV16 format. */ ++ SF_FORMAT_NIST = 0x070000, /* Sphere NIST format. */ ++ SF_FORMAT_VOC = 0x080000, /* VOC files. */ ++ SF_FORMAT_IRCAM = 0x0A0000, /* Berkeley/IRCAM/CARL */ ++ SF_FORMAT_W64 = 0x0B0000, /* Sonic Foundry's 64 bit RIFF/WAV */ ++ SF_FORMAT_MAT4 = 0x0C0000, /* Matlab (tm) V4.2 / GNU Octave 2.0 */ ++ SF_FORMAT_MAT5 = 0x0D0000, /* Matlab (tm) V5.0 / GNU Octave 2.1 */ ++ SF_FORMAT_PVF = 0x0E0000, /* Portable Voice Format */ ++ SF_FORMAT_XI = 0x0F0000, /* Fasttracker 2 Extended Instrument */ ++ SF_FORMAT_HTK = 0x100000, /* HMM Tool Kit format */ ++ SF_FORMAT_SDS = 0x110000, /* Midi Sample Dump Standard */ ++ SF_FORMAT_AVR = 0x120000, /* Audio Visual Research */ ++ SF_FORMAT_WAVEX = 0x130000, /* MS WAVE with WAVEFORMATEX */ ++ SF_FORMAT_SD2 = 0x160000, /* Sound Designer 2 */ ++ SF_FORMAT_FLAC = 0x170000, /* FLAC lossless file format */ ++ SF_FORMAT_CAF = 0x180000, /* Core Audio File format */ ++ SF_FORMAT_WVE = 0x190000, /* Psion WVE format */ ++ SF_FORMAT_OGG = 0x200000, /* Xiph OGG container */ ++ SF_FORMAT_MPC2K = 0x210000, /* Akai MPC 2000 sampler */ ++ SF_FORMAT_RF64 = 0x220000, /* RF64 WAV file */ ++ ++ /* Subtypes from here on. */ ++ ++ SF_FORMAT_PCM_S8 = 0x0001, /* Signed 8 bit data */ ++ SF_FORMAT_PCM_16 = 0x0002, /* Signed 16 bit data */ ++ SF_FORMAT_PCM_24 = 0x0003, /* Signed 24 bit data */ ++ SF_FORMAT_PCM_32 = 0x0004, /* Signed 32 bit data */ ++ ++ SF_FORMAT_PCM_U8 = 0x0005, /* Unsigned 8 bit data (WAV and RAW only) */ ++ ++ SF_FORMAT_FLOAT = 0x0006, /* 32 bit float data */ ++ SF_FORMAT_DOUBLE = 0x0007, /* 64 bit float data */ ++ ++ SF_FORMAT_ULAW = 0x0010, /* U-Law encoded. */ ++ SF_FORMAT_ALAW = 0x0011, /* A-Law encoded. */ ++ SF_FORMAT_IMA_ADPCM = 0x0012, /* IMA ADPCM. */ ++ SF_FORMAT_MS_ADPCM = 0x0013, /* Microsoft ADPCM. */ ++ ++ SF_FORMAT_GSM610 = 0x0020, /* GSM 6.10 encoding. */ ++ SF_FORMAT_VOX_ADPCM = 0x0021, /* OKI / Dialogix ADPCM */ ++ ++ SF_FORMAT_G721_32 = 0x0030, /* 32kbs G721 ADPCM encoding. */ ++ SF_FORMAT_G723_24 = 0x0031, /* 24kbs G723 ADPCM encoding. */ ++ SF_FORMAT_G723_40 = 0x0032, /* 40kbs G723 ADPCM encoding. */ ++ ++ SF_FORMAT_DWVW_12 = 0x0040, /* 12 bit Delta Width Variable Word encoding. */ ++ SF_FORMAT_DWVW_16 = 0x0041, /* 16 bit Delta Width Variable Word encoding. */ ++ SF_FORMAT_DWVW_24 = 0x0042, /* 24 bit Delta Width Variable Word encoding. */ ++ SF_FORMAT_DWVW_N = 0x0043, /* N bit Delta Width Variable Word encoding. */ ++ ++ SF_FORMAT_DPCM_8 = 0x0050, /* 8 bit differential PCM (XI only) */ ++ SF_FORMAT_DPCM_16 = 0x0051, /* 16 bit differential PCM (XI only) */ ++ ++ SF_FORMAT_VORBIS = 0x0060, /* Xiph Vorbis encoding. */ ++ ++ /* Endian-ness options. */ ++ ++ SF_ENDIAN_FILE = 0x00000000, /* Default file endian-ness. */ ++ SF_ENDIAN_LITTLE = 0x10000000, /* Force little endian-ness. */ ++ SF_ENDIAN_BIG = 0x20000000, /* Force big endian-ness. */ ++ SF_ENDIAN_CPU = 0x30000000, /* Force CPU endian-ness. */ ++ ++ SF_FORMAT_SUBMASK = 0x0000FFFF, ++ SF_FORMAT_TYPEMASK = 0x0FFF0000, ++ SF_FORMAT_ENDMASK = 0x30000000 ++} ; ++ ++/* ++** The following are the valid command numbers for the sf_command() ++** interface. The use of these commands is documented in the file ++** command.html in the doc directory of the source code distribution. ++*/ ++ ++enum ++{ SFC_GET_LIB_VERSION = 0x1000, ++ SFC_GET_LOG_INFO = 0x1001, ++ SFC_GET_CURRENT_SF_INFO = 0x1002, ++ ++ ++ SFC_GET_NORM_DOUBLE = 0x1010, ++ SFC_GET_NORM_FLOAT = 0x1011, ++ SFC_SET_NORM_DOUBLE = 0x1012, ++ SFC_SET_NORM_FLOAT = 0x1013, ++ SFC_SET_SCALE_FLOAT_INT_READ = 0x1014, ++ SFC_SET_SCALE_INT_FLOAT_WRITE = 0x1015, ++ ++ SFC_GET_SIMPLE_FORMAT_COUNT = 0x1020, ++ SFC_GET_SIMPLE_FORMAT = 0x1021, ++ ++ SFC_GET_FORMAT_INFO = 0x1028, ++ ++ SFC_GET_FORMAT_MAJOR_COUNT = 0x1030, ++ SFC_GET_FORMAT_MAJOR = 0x1031, ++ SFC_GET_FORMAT_SUBTYPE_COUNT = 0x1032, ++ SFC_GET_FORMAT_SUBTYPE = 0x1033, ++ ++ SFC_CALC_SIGNAL_MAX = 0x1040, ++ SFC_CALC_NORM_SIGNAL_MAX = 0x1041, ++ SFC_CALC_MAX_ALL_CHANNELS = 0x1042, ++ SFC_CALC_NORM_MAX_ALL_CHANNELS = 0x1043, ++ SFC_GET_SIGNAL_MAX = 0x1044, ++ SFC_GET_MAX_ALL_CHANNELS = 0x1045, ++ ++ SFC_SET_ADD_PEAK_CHUNK = 0x1050, ++ SFC_SET_ADD_HEADER_PAD_CHUNK = 0x1051, ++ ++ SFC_UPDATE_HEADER_NOW = 0x1060, ++ SFC_SET_UPDATE_HEADER_AUTO = 0x1061, ++ ++ SFC_FILE_TRUNCATE = 0x1080, ++ ++ SFC_SET_RAW_START_OFFSET = 0x1090, ++ ++ SFC_SET_DITHER_ON_WRITE = 0x10A0, ++ SFC_SET_DITHER_ON_READ = 0x10A1, ++ ++ SFC_GET_DITHER_INFO_COUNT = 0x10A2, ++ SFC_GET_DITHER_INFO = 0x10A3, ++ ++ SFC_GET_EMBED_FILE_INFO = 0x10B0, ++ ++ SFC_SET_CLIPPING = 0x10C0, ++ SFC_GET_CLIPPING = 0x10C1, ++ ++ SFC_GET_INSTRUMENT = 0x10D0, ++ SFC_SET_INSTRUMENT = 0x10D1, ++ ++ SFC_GET_LOOP_INFO = 0x10E0, ++ ++ SFC_GET_BROADCAST_INFO = 0x10F0, ++ SFC_SET_BROADCAST_INFO = 0x10F1, ++ ++ SFC_GET_CHANNEL_MAP_INFO = 0x1100, ++ SFC_SET_CHANNEL_MAP_INFO = 0x1101, ++ ++ SFC_RAW_DATA_NEEDS_ENDSWAP = 0x1110, ++ ++ /* Support for Wavex Ambisonics Format */ ++ SFC_WAVEX_SET_AMBISONIC = 0x1200, ++ SFC_WAVEX_GET_AMBISONIC = 0x1201, ++ ++ SFC_SET_VBR_ENCODING_QUALITY = 0x1300, ++ ++ /* Following commands for testing only. */ ++ SFC_TEST_IEEE_FLOAT_REPLACE = 0x6001, ++ ++ /* ++ ** SFC_SET_ADD_* values are deprecated and will disappear at some ++ ** time in the future. They are guaranteed to be here up to and ++ ** including version 1.0.8 to avoid breakage of existng software. ++ ** They currently do nothing and will continue to do nothing. ++ */ ++ SFC_SET_ADD_DITHER_ON_WRITE = 0x1070, ++ SFC_SET_ADD_DITHER_ON_READ = 0x1071 ++} ; ++ ++ ++/* ++** String types that can be set and read from files. Not all file types ++** support this and even the file types which support one, may not support ++** all string types. ++*/ ++ ++enum ++{ SF_STR_TITLE = 0x01, ++ SF_STR_COPYRIGHT = 0x02, ++ SF_STR_SOFTWARE = 0x03, ++ SF_STR_ARTIST = 0x04, ++ SF_STR_COMMENT = 0x05, ++ SF_STR_DATE = 0x06, ++ SF_STR_ALBUM = 0x07, ++ SF_STR_LICENSE = 0x08, ++ SF_STR_TRACKNUMBER = 0x09, ++ SF_STR_GENRE = 0x10 ++} ; ++ ++/* ++** Use the following as the start and end index when doing metadata ++** transcoding. ++*/ ++ ++#define SF_STR_FIRST SF_STR_TITLE ++#define SF_STR_LAST SF_STR_GENRE ++ ++enum ++{ /* True and false */ ++ SF_FALSE = 0, ++ SF_TRUE = 1, ++ ++ /* Modes for opening files. */ ++ SFM_READ = 0x10, ++ SFM_WRITE = 0x20, ++ SFM_RDWR = 0x30, ++ ++ SF_AMBISONIC_NONE = 0x40, ++ SF_AMBISONIC_B_FORMAT = 0x41 ++} ; ++ ++/* Public error values. These are guaranteed to remain unchanged for the duration ++** of the library major version number. ++** There are also a large number of private error numbers which are internal to ++** the library which can change at any time. ++*/ ++ ++enum ++{ SF_ERR_NO_ERROR = 0, ++ SF_ERR_UNRECOGNISED_FORMAT = 1, ++ SF_ERR_SYSTEM = 2, ++ SF_ERR_MALFORMED_FILE = 3, ++ SF_ERR_UNSUPPORTED_ENCODING = 4 ++} ; ++ ++ ++/* Channel map values (used with SFC_SET/GET_CHANNEL_MAP). ++*/ ++ ++enum ++{ SF_CHANNEL_MAP_INVALID = 0, ++ SF_CHANNEL_MAP_MONO = 1, ++ SF_CHANNEL_MAP_LEFT, /* Apple calls this 'Left' */ ++ SF_CHANNEL_MAP_RIGHT, /* Apple calls this 'Right' */ ++ SF_CHANNEL_MAP_CENTER, /* Apple calls this 'Center' */ ++ SF_CHANNEL_MAP_FRONT_LEFT, ++ SF_CHANNEL_MAP_FRONT_RIGHT, ++ SF_CHANNEL_MAP_FRONT_CENTER, ++ SF_CHANNEL_MAP_REAR_CENTER, /* Apple calls this 'Center Surround', Msft calls this 'Back Center' */ ++ SF_CHANNEL_MAP_REAR_LEFT, /* Apple calls this 'Left Surround', Msft calls this 'Back Left' */ ++ SF_CHANNEL_MAP_REAR_RIGHT, /* Apple calls this 'Right Surround', Msft calls this 'Back Right' */ ++ SF_CHANNEL_MAP_LFE, /* Apple calls this 'LFEScreen', Msft calls this 'Low Frequency' */ ++ SF_CHANNEL_MAP_FRONT_LEFT_OF_CENTER, /* Apple calls this 'Left Center' */ ++ SF_CHANNEL_MAP_FRONT_RIGHT_OF_CENTER, /* Apple calls this 'Right Center */ ++ SF_CHANNEL_MAP_SIDE_LEFT, /* Apple calls this 'Left Surround Direct' */ ++ SF_CHANNEL_MAP_SIDE_RIGHT, /* Apple calls this 'Right Surround Direct' */ ++ SF_CHANNEL_MAP_TOP_CENTER, /* Apple calls this 'Top Center Surround' */ ++ SF_CHANNEL_MAP_TOP_FRONT_LEFT, /* Apple calls this 'Vertical Height Left' */ ++ SF_CHANNEL_MAP_TOP_FRONT_RIGHT, /* Apple calls this 'Vertical Height Right' */ ++ SF_CHANNEL_MAP_TOP_FRONT_CENTER, /* Apple calls this 'Vertical Height Center' */ ++ SF_CHANNEL_MAP_TOP_REAR_LEFT, /* Apple and MS call this 'Top Back Left' */ ++ SF_CHANNEL_MAP_TOP_REAR_RIGHT, /* Apple and MS call this 'Top Back Right' */ ++ SF_CHANNEL_MAP_TOP_REAR_CENTER, /* Apple and MS call this 'Top Back Center' */ ++ ++ SF_CHANNEL_MAP_AMBISONIC_B_W, ++ SF_CHANNEL_MAP_AMBISONIC_B_X, ++ SF_CHANNEL_MAP_AMBISONIC_B_Y, ++ SF_CHANNEL_MAP_AMBISONIC_B_Z, ++ ++ SF_CHANNEL_MAP_MAX ++} ; ++ ++ ++/* A SNDFILE* pointer can be passed around much like stdio.h's FILE* pointer. */ ++ ++typedef struct SNDFILE_tag SNDFILE ; ++ ++/* The following typedef is system specific and is defined when libsndfile is ++** compiled. sf_count_t will be a 64 bit value when the underlying OS allows ++** 64 bit file offsets. ++** On windows, we need to allow the same header file to be compiler by both GCC ++** and the Microsoft compiler. ++*/ ++ ++#if (defined (_MSCVER) || defined (_MSC_VER)) ++typedef __int64 sf_count_t ; ++#define SF_COUNT_MAX 0x7fffffffffffffffi64 ++#else ++typedef @TYPEOF_SF_COUNT_T@ sf_count_t ; ++#define SF_COUNT_MAX @SF_COUNT_MAX@ ++#endif ++ ++ ++/* A pointer to a SF_INFO structure is passed to sf_open () and filled in. ++** On write, the SF_INFO structure is filled in by the user and passed into ++** sf_open (). ++*/ ++ ++struct SF_INFO ++{ sf_count_t frames ; /* Used to be called samples. Changed to avoid confusion. */ ++ int samplerate ; ++ int channels ; ++ int format ; ++ int sections ; ++ int seekable ; ++} ; ++ ++typedef struct SF_INFO SF_INFO ; ++ ++/* The SF_FORMAT_INFO struct is used to retrieve information about the sound ++** file formats libsndfile supports using the sf_command () interface. ++** ++** Using this interface will allow applications to support new file formats ++** and encoding types when libsndfile is upgraded, without requiring ++** re-compilation of the application. ++** ++** Please consult the libsndfile documentation (particularly the information ++** on the sf_command () interface) for examples of its use. ++*/ ++ ++typedef struct ++{ int format ; ++ const char *name ; ++ const char *extension ; ++} SF_FORMAT_INFO ; ++ ++/* ++** Enums and typedefs for adding dither on read and write. ++** See the html documentation for sf_command(), SFC_SET_DITHER_ON_WRITE ++** and SFC_SET_DITHER_ON_READ. ++*/ ++ ++enum ++{ SFD_DEFAULT_LEVEL = 0, ++ SFD_CUSTOM_LEVEL = 0x40000000, ++ ++ SFD_NO_DITHER = 500, ++ SFD_WHITE = 501, ++ SFD_TRIANGULAR_PDF = 502 ++} ; ++ ++typedef struct ++{ int type ; ++ double level ; ++ const char *name ; ++} SF_DITHER_INFO ; ++ ++/* Struct used to retrieve information about a file embedded within a ++** larger file. See SFC_GET_EMBED_FILE_INFO. ++*/ ++ ++typedef struct ++{ sf_count_t offset ; ++ sf_count_t length ; ++} SF_EMBED_FILE_INFO ; ++ ++/* ++** Structs used to retrieve music sample information from a file. ++*/ ++ ++enum ++{ /* ++ ** The loop mode field in SF_INSTRUMENT will be one of the following. ++ */ ++ SF_LOOP_NONE = 800, ++ SF_LOOP_FORWARD, ++ SF_LOOP_BACKWARD, ++ SF_LOOP_ALTERNATING ++} ; ++ ++typedef struct ++{ int gain ; ++ char basenote, detune ; ++ char velocity_lo, velocity_hi ; ++ char key_lo, key_hi ; ++ int loop_count ; ++ ++ struct ++ { int mode ; ++ unsigned int start ; ++ unsigned int end ; ++ unsigned int count ; ++ } loops [16] ; /* make variable in a sensible way */ ++} SF_INSTRUMENT ; ++ ++ ++ ++/* Struct used to retrieve loop information from a file.*/ ++typedef struct ++{ ++ short time_sig_num ; /* any positive integer > 0 */ ++ short time_sig_den ; /* any positive power of 2 > 0 */ ++ int loop_mode ; /* see SF_LOOP enum */ ++ ++ int num_beats ; /* this is NOT the amount of quarter notes !!!*/ ++ /* a full bar of 4/4 is 4 beats */ ++ /* a full bar of 7/8 is 7 beats */ ++ ++ float bpm ; /* suggestion, as it can be calculated using other fields:*/ ++ /* file's lenght, file's sampleRate and our time_sig_den*/ ++ /* -> bpms are always the amount of _quarter notes_ per minute */ ++ ++ int root_key ; /* MIDI note, or -1 for None */ ++ int future [6] ; ++} SF_LOOP_INFO ; ++ ++ ++/* Struct used to retrieve broadcast (EBU) information from a file. ++** Strongly (!) based on EBU "bext" chunk format used in Broadcast WAVE. ++*/ ++#define SF_BROADCAST_INFO_VAR(coding_hist_size) \ ++ struct \ ++ { char description [256] ; \ ++ char originator [32] ; \ ++ char originator_reference [32] ; \ ++ char origination_date [10] ; \ ++ char origination_time [8] ; \ ++ unsigned int time_reference_low ; \ ++ unsigned int time_reference_high ; \ ++ short version ; \ ++ char umid [64] ; \ ++ char reserved [190] ; \ ++ unsigned int coding_history_size ; \ ++ char coding_history [coding_hist_size] ; \ ++ } ++ ++/* SF_BROADCAST_INFO is the above struct with coding_history field of 256 bytes. */ ++typedef SF_BROADCAST_INFO_VAR (256) SF_BROADCAST_INFO ; ++ ++ ++/* Virtual I/O functionality. */ ++ ++typedef sf_count_t (*sf_vio_get_filelen) (void *user_data) ; ++typedef sf_count_t (*sf_vio_seek) (sf_count_t offset, int whence, void *user_data) ; ++typedef sf_count_t (*sf_vio_read) (void *ptr, sf_count_t count, void *user_data) ; ++typedef sf_count_t (*sf_vio_write) (const void *ptr, sf_count_t count, void *user_data) ; ++typedef sf_count_t (*sf_vio_tell) (void *user_data) ; ++ ++struct SF_VIRTUAL_IO ++{ sf_vio_get_filelen get_filelen ; ++ sf_vio_seek seek ; ++ sf_vio_read read ; ++ sf_vio_write write ; ++ sf_vio_tell tell ; ++} ; ++ ++typedef struct SF_VIRTUAL_IO SF_VIRTUAL_IO ; ++ ++ ++/* Open the specified file for read, write or both. On error, this will ++** return a NULL pointer. To find the error number, pass a NULL SNDFILE ++** to sf_strerror (). ++** All calls to sf_open() should be matched with a call to sf_close(). ++*/ ++ ++SNDFILE* sf_open (const char *path, int mode, SF_INFO *sfinfo) ; ++ ++ ++/* Use the existing file descriptor to create a SNDFILE object. If close_desc ++** is TRUE, the file descriptor will be closed when sf_close() is called. If ++** it is FALSE, the descritor will not be closed. ++** When passed a descriptor like this, the library will assume that the start ++** of file header is at the current file offset. This allows sound files within ++** larger container files to be read and/or written. ++** On error, this will return a NULL pointer. To find the error number, pass a ++** NULL SNDFILE to sf_strerror (). ++** All calls to sf_open_fd() should be matched with a call to sf_close(). ++ ++*/ ++ ++SNDFILE* sf_open_fd (int fd, int mode, SF_INFO *sfinfo, int close_desc) ; ++ ++SNDFILE* sf_open_virtual (SF_VIRTUAL_IO *sfvirtual, int mode, SF_INFO *sfinfo, void *user_data) ; ++ ++ ++/* sf_error () returns a error number which can be translated to a text ++** string using sf_error_number(). ++*/ ++ ++int sf_error (SNDFILE *sndfile) ; ++ ++ ++/* sf_strerror () returns to the caller a pointer to the current error message for ++** the given SNDFILE. ++*/ ++ ++const char* sf_strerror (SNDFILE *sndfile) ; ++ ++ ++/* sf_error_number () allows the retrieval of the error string for each internal ++** error number. ++** ++*/ ++ ++const char* sf_error_number (int errnum) ; ++ ++ ++/* The following two error functions are deprecated but they will remain in the ++** library for the forseeable future. The function sf_strerror() should be used ++** in their place. ++*/ ++ ++int sf_perror (SNDFILE *sndfile) ; ++int sf_error_str (SNDFILE *sndfile, char* str, size_t len) ; ++ ++ ++/* Return TRUE if fields of the SF_INFO struct are a valid combination of values. */ ++ ++int sf_command (SNDFILE *sndfile, int command, void *data, int datasize) ; ++ ++ ++/* Return TRUE if fields of the SF_INFO struct are a valid combination of values. */ ++ ++int sf_format_check (const SF_INFO *info) ; ++ ++ ++/* Seek within the waveform data chunk of the SNDFILE. sf_seek () uses ++** the same values for whence (SEEK_SET, SEEK_CUR and SEEK_END) as ++** stdio.h function fseek (). ++** An offset of zero with whence set to SEEK_SET will position the ++** read / write pointer to the first data sample. ++** On success sf_seek returns the current position in (multi-channel) ++** samples from the start of the file. ++** Please see the libsndfile documentation for moving the read pointer ++** separately from the write pointer on files open in mode SFM_RDWR. ++** On error all of these functions return -1. ++*/ ++ ++sf_count_t sf_seek (SNDFILE *sndfile, sf_count_t frames, int whence) ; ++ ++ ++/* Functions for retrieving and setting string data within sound files. ++** Not all file types support this features; AIFF and WAV do. For both ++** functions, the str_type parameter must be one of the SF_STR_* values ++** defined above. ++** On error, sf_set_string() returns non-zero while sf_get_string() ++** returns NULL. ++*/ ++ ++int sf_set_string (SNDFILE *sndfile, int str_type, const char* str) ; ++ ++const char* sf_get_string (SNDFILE *sndfile, int str_type) ; ++ ++ ++/* Return the library version string. */ ++ ++const char * sf_version_string (void) ; ++ ++ ++/* Functions for reading/writing the waveform data of a sound file. ++*/ ++ ++sf_count_t sf_read_raw (SNDFILE *sndfile, void *ptr, sf_count_t bytes) ; ++sf_count_t sf_write_raw (SNDFILE *sndfile, const void *ptr, sf_count_t bytes) ; ++ ++ ++/* Functions for reading and writing the data chunk in terms of frames. ++** The number of items actually read/written = frames * number of channels. ++** sf_xxxx_raw read/writes the raw data bytes from/to the file ++** sf_xxxx_short passes data in the native short format ++** sf_xxxx_int passes data in the native int format ++** sf_xxxx_float passes data in the native float format ++** sf_xxxx_double passes data in the native double format ++** All of these read/write function return number of frames read/written. ++*/ ++ ++sf_count_t sf_readf_short (SNDFILE *sndfile, short *ptr, sf_count_t frames) ; ++sf_count_t sf_writef_short (SNDFILE *sndfile, const short *ptr, sf_count_t frames) ; ++ ++sf_count_t sf_readf_int (SNDFILE *sndfile, int *ptr, sf_count_t frames) ; ++sf_count_t sf_writef_int (SNDFILE *sndfile, const int *ptr, sf_count_t frames) ; ++ ++sf_count_t sf_readf_float (SNDFILE *sndfile, float *ptr, sf_count_t frames) ; ++sf_count_t sf_writef_float (SNDFILE *sndfile, const float *ptr, sf_count_t frames) ; ++ ++sf_count_t sf_readf_double (SNDFILE *sndfile, double *ptr, sf_count_t frames) ; ++sf_count_t sf_writef_double (SNDFILE *sndfile, const double *ptr, sf_count_t frames) ; ++ ++ ++/* Functions for reading and writing the data chunk in terms of items. ++** Otherwise similar to above. ++** All of these read/write function return number of items read/written. ++*/ ++ ++sf_count_t sf_read_short (SNDFILE *sndfile, short *ptr, sf_count_t items) ; ++sf_count_t sf_write_short (SNDFILE *sndfile, const short *ptr, sf_count_t items) ; ++ ++sf_count_t sf_read_int (SNDFILE *sndfile, int *ptr, sf_count_t items) ; ++sf_count_t sf_write_int (SNDFILE *sndfile, const int *ptr, sf_count_t items) ; ++ ++sf_count_t sf_read_float (SNDFILE *sndfile, float *ptr, sf_count_t items) ; ++sf_count_t sf_write_float (SNDFILE *sndfile, const float *ptr, sf_count_t items) ; ++ ++sf_count_t sf_read_double (SNDFILE *sndfile, double *ptr, sf_count_t items) ; ++sf_count_t sf_write_double (SNDFILE *sndfile, const double *ptr, sf_count_t items) ; ++ ++ ++/* Close the SNDFILE and clean up all memory allocations associated with this ++** file. ++** Returns 0 on success, or an error number. ++*/ ++ ++int sf_close (SNDFILE *sndfile) ; ++ ++ ++/* If the file is opened SFM_WRITE or SFM_RDWR, call fsync() on the file ++** to force the writing of data to disk. If the file is opened SFM_READ ++** no action is taken. ++*/ ++ ++void sf_write_sync (SNDFILE *sndfile) ; ++ ++ ++ ++/* The function sf_wchar_open() is Windows Only! ++** Open a file passing in a Windows Unicode filename. Otherwise, this is ++** the same as sf_open(). ++** ++** In order for this to work, you need to do the following: ++** ++** #include <windows.h> ++** #define ENABLE_SNDFILE_WINDOWS_PROTOTYPES 1 ++** #including <sndfile.h> ++*/ ++ ++#if (defined (ENABLE_SNDFILE_WINDOWS_PROTOTYPES) && ENABLE_SNDFILE_WINDOWS_PROTOTYPES) ++SNDFILE* sf_wchar_open (LPCWSTR wpath, int mode, SF_INFO *sfinfo) ; ++#endif ++ ++ ++ ++#ifdef __cplusplus ++} /* extern "C" */ ++#endif /* __cplusplus */ ++ ++#endif /* SNDFILE_H */ ++ +--- a/src/test_file_io.c ++++ b/src/test_file_io.c +@@ -64,7 +64,7 @@ file_open_test (const char *filename) + psf = &sf_data ; + + /* Ensure that the file doesn't already exist. */ +- if (unlink (filename) != 0 && errno != ENOENT) ++ if (_unlink (filename) != 0 && errno != ENOENT) + { printf ("\n\nLine %d: unlink failed (%d) : %s\n\n", __LINE__, errno, strerror (errno)) ; + exit (1) ; + } ; +@@ -88,7 +88,7 @@ file_open_test (const char *filename) + + test_close_or_die (psf, __LINE__) ; + +- unlink (psf->file.path.c) ; ++ _unlink(psf->file.path.c) ; + + /* Test file open in read/write mode for a non-existant file. */ + psf->file.mode = SFM_RDWR ; +@@ -102,7 +102,7 @@ file_open_test (const char *filename) + + test_close_or_die (psf, __LINE__) ; + +- unlink (psf->file.path.c) ; ++ _unlink(psf->file.path.c) ; + puts ("ok") ; + } /* file_open_test */ + +@@ -433,6 +433,6 @@ test_file_io (void) + file_read_write_test (filename) ; + file_truncate_test (filename) ; + +- unlink (filename) ; ++ _unlink(filename) ; + } /* main */ + +-- +2.10.2.windows.1 +