From e9823a113b28e33924bc23b08e1a34a80ffec8ee Mon Sep 17 00:00:00 2001
From: wang <wang@wang-OptiPlex-7010.(none)>
Date: Wed, 9 Oct 2013 01:35:17 +0200
Subject: [PATCH] Fix bugs during installation of libsndfile-ocaml. New
 installation tested in Ubuntu 12.04.

---
 INSTALL.txt                                   |   1 +
 examples/fft/fft.png                          | Bin 22515 -> 0 bytes
 .../lib/src/libsndfile-ocaml/sndfile.h        | 666 ++++++++++++++++++
 .../lib/src/libsndfile-ocaml/sndfile_stub.c   |   2 +-
 4 files changed, 668 insertions(+), 1 deletion(-)
 delete mode 100644 examples/fft/fft.png
 create mode 100644 interpreter/lib/src/libsndfile-ocaml/sndfile.h

diff --git a/INSTALL.txt b/INSTALL.txt
index ebfb17d..915253e 100644
--- a/INSTALL.txt
+++ b/INSTALL.txt
@@ -6,6 +6,7 @@ PREREQUISITES
 -------------
 
 * OCaml is needed (tested versions: 3.12.1, 4.00.1).
+* Faust is needed (tested version: 0.9.24).
 * The GNU C compiler gcc is recommended.
 * Standard development utilities are required, such as `make' (install XCode command line tools on Mac OS).
 
diff --git a/examples/fft/fft.png b/examples/fft/fft.png
deleted file mode 100644
index eec0f4b92371b1003ada7db3c283416928934e1c..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 22515
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

diff --git a/interpreter/lib/src/libsndfile-ocaml/sndfile.h b/interpreter/lib/src/libsndfile-ocaml/sndfile.h
new file mode 100644
index 0000000..d0b26de
--- /dev/null
+++ b/interpreter/lib/src/libsndfile-ocaml/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 int64_t	sf_count_t ;
+#define SF_COUNT_MAX		0x7FFFFFFFFFFFFFFFLL
+#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 */
+
diff --git a/interpreter/lib/src/libsndfile-ocaml/sndfile_stub.c b/interpreter/lib/src/libsndfile-ocaml/sndfile_stub.c
index ccf2b16..dfb1bc5 100644
--- a/interpreter/lib/src/libsndfile-ocaml/sndfile_stub.c
+++ b/interpreter/lib/src/libsndfile-ocaml/sndfile_stub.c
@@ -30,7 +30,7 @@
 #include <stdlib.h>
 #include <string.h>
 
-#include <sndfile.h>
+#include "sndfile.h"
 
 #define CAML_SNDFILE_VERSION "v0.1"
 
-- 
2.20.1