packages feed

hsndfile 0.4.0 → 0.5.0

raw patch · 8 files changed

+54/−606 lines, 8 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- Sound.File.Sndfile: hGetContentChunks :: (Sample e, Buffer a e) => Count -> Handle -> IO (Info, [a e])
- Sound.File.Sndfile: readFileChunks :: (Sample e, Buffer a e) => Count -> FilePath -> IO (Info, [a e])
- Sound.File.Sndfile.Buffer: hGetContentChunks :: (Sample e, Buffer a e) => Count -> Handle -> IO (Info, [a e])
- Sound.File.Sndfile.Buffer: readFileChunks :: (Sample e, Buffer a e) => Count -> FilePath -> IO (Info, [a e])

Files

ChangeLog.md view
@@ -1,3 +1,7 @@+### Version 0.5++* [__USER__] Remove lazy read functions `hGetContentChunks` and `readFileChunks` from library interface. Those functions were implemented incorrectly.+ ### Version 0.4  * [__USER__] Simplified Buffer API: A single type class, **Buffer**, is provided for **ForeignPtr** based I/O. Instances are provided in separate packages, e.g. [hsndfile-vector](http://hackage.haskell.org/package/hsndfile-vector).
README.md view
@@ -1,18 +1,4 @@-# hsndfile- **hsndfile** is a Haskell interface to Eric de Castro Lopo's [libsndfile][]. For more detailed information please visit [**hsndfile**'s homepage][hsndfile]. -The easiest way to install **hsndfile** is by using [cabal-install][]:--	cabal install hsndfile--Yes, that's all! If you want to play with the code, you can download the [latest release from hackage][hackage] or get a copy of the darcs repository:--    darcs get http://code.haskell.org/hsndfile/--## Changes- [libsndfile]: http://www.mega-nerd.com/libsndfile/ [hsndfile]: http://haskell.org/haskellwiki/Hsndfile-[hackage]: http://hackage.haskell.org/cgi-bin/hackage-scripts/package/hsndfile-[cabal-install]: http://hackage.haskell.org/cgi-bin/hackage-scripts/package/cabal-install
Sound/File/Sndfile.hs view
@@ -21,7 +21,7 @@   , Buffer(..)   , hGetBuffer   , hGetContents, readFile-  , hGetContentChunks, readFileChunks+  -- , hGetContentChunks, readFileChunks   , hPutBuffer, writeFile     -- *Exception handling   , Exception(..), catch
Sound/File/Sndfile/Buffer.hs view
@@ -6,8 +6,8 @@   , hGetBuffer   , hGetContents   , readFile-  , hGetContentChunks-  , readFileChunks+  -- , hGetContentChunks+  -- , readFileChunks   , hPutBuffer   , writeFile ) where@@ -36,7 +36,7 @@     if n' == 0         then return Nothing         else do-            fp <- newForeignPtr_ p+            fp <- newForeignPtr finalizerFree p             Just `fmap` fromForeignPtr fp 0 (n * numChannels)     where         numChannels = (channels.hInfo) h
Sound/File/Sndfile/Interface.chs view
@@ -209,12 +209,11 @@ -- ==================================================================== -- Exceptions -checkHandle :: HandlePtr -> IO HandlePtr+checkHandle :: HandlePtr -> IO () checkHandle handle = do     code <- liftM fromIntegral $ {#call unsafe sf_error#} handle     when (code /= 0) $         peekCString ({#call pure sf_strerror#} handle) >>= E.throw code-    return handle  -- ==================================================================== -- Handle operations@@ -250,14 +249,14 @@         with info (\cInfo -> do             cHandle <- {#call unsafe sf_open#}                             cFilePath (cFromEnum ioMode) (castPtr cInfo)-                            >>= checkHandle+            checkHandle cHandle             newInfo <- peek cInfo             return $ Handle newInfo cHandle))  -- | The 'hClose' function closes the stream, deallocates its internal buffers and returns () on success or signals an 'Exception' otherwise. hClose :: Handle -> IO () hClose handle = do-    {#call unsafe sf_close#} $ hPtr handle+    _ <- {#call unsafe sf_close#} $ hPtr handle     checkHandle nullPtr     return () @@ -365,6 +364,6 @@ setString :: Handle -> StringType -> String -> IO () setString (Handle _ handle) t s =     withCString s (\cs -> do-        {#call unsafe sf_set_string#} handle (cFromEnum t) cs+        _ <- {#call unsafe sf_set_string#} handle (cFromEnum t) cs         checkHandle handle         return ())
+ examples/normalize.hs view
@@ -0,0 +1,14 @@+module Main where++import qualified Sound.File.Sndfile.Buffer.StorableVector.Examples as StorableVector+import qualified Sound.File.Sndfile.Buffer.Vector.Examples as Vector+import           System.Environment++main = do+    (inFile:outFile:args) <- getArgs+    let f = case args of+                ["StorableVector"] -> StorableVector.normalizeSoundFile+                ["Vector"]         -> Vector.normalizeSoundFile+                []                 -> Vector.normalizeSoundFile+                (x:_)              -> fail $ "Invalid buffer interface " ++ x+    f inFile outFile
hsndfile.cabal view
@@ -1,42 +1,41 @@-name:                   hsndfile-version:                0.4.0-category:               Data, Sound-license:                GPL-license-file:           COPYING-copyright:              Stefan Kersten, 2007-2010-author:                 Stefan Kersten-maintainer:             Stefan Kersten <sk@k-hornz.de>-stability:              Experimental-homepage:               http://haskell.org/haskellwiki/Hsndfile-synopsis:               Haskell bindings for libsndfile-description:            Haskell bindings for /libsndfile/, a comprehensive C library for reading and writing a large number of soundfile formats by Erik de Castro Lopo (<http://www.mega-nerd.com/libsndfile/>).+Name:                   hsndfile+Version:                0.5.0+Category:               Data, Sound+License:                GPL+License-File:           COPYING+Copyright:              Stefan Kersten, 2007-2010+Author:                 Stefan Kersten+Maintainer:             Stefan Kersten <sk@k-hornz.de>+Stability:              Experimental+Homepage:               http://haskell.org/haskellwiki/Hsndfile+Bug-Reports:            https://github.com/kaoskorobase/hsndfile/issues+Synopsis:               Haskell bindings for libsndfile+Description:            Haskell bindings for /libsndfile/, a comprehensive C library for reading and writing a large number of soundfile formats by Erik de Castro Lopo (<http://www.mega-nerd.com/libsndfile/>).                         .                         For more information on /hsndfile/ visit its homepage at <http://haskell.org/haskellwiki/Hsndfile>.-tested-with:            GHC==6.8.*, GHC==6.10.1, GHC==6.10.4-build-type:             Simple-cabal-version:          >= 1.6+Tested-With:            GHC==6.8.*, GHC==6.10.1, GHC==6.10.4, GHC==6.12.1, GHC==6.12.3+Build-Type:             Simple+Cabal-Version:          >= 1.6 -extra-source-files:+Extra-Source-Files:                         ChangeLog.md                         README.md-                        libsndfile/sndfile.h+                        examples/normalize.hs -library-  build-depends:        base >= 4 && < 5,+Library+  Build-Depends:        base >= 4 && < 5,                         haskell98-  build-tools:          c2hs >= 0.15-  exposed-modules:      Sound.File.Sndfile+  Build-Tools:          c2hs >= 0.15+  Exposed-Modules:      Sound.File.Sndfile                         Sound.File.Sndfile.Buffer-  other-modules:        C2HS+  Other-Modules:        C2HS                         Sound.File.Sndfile.Buffer.Internal                         Sound.File.Sndfile.Buffer.Sample                         Sound.File.Sndfile.Exception                         Sound.File.Sndfile.Interface-  ghc-options:          -Wall -fno-warn-name-shadowing-  extra-libraries:      sndfile-  if os(windows)-    include-dirs:       libsndfile+  Ghc-Options:          -Wall -fno-warn-name-shadowing+  Extra-Libraries:      sndfile -source-repository head-  type:             darcs-  location:         http://code.haskell.org/hsndfile+Source-Repository head+  Type:                 git+  Location:             git://github.com/kaoskorobase/hsndfile.git
− libsndfile/sndfile.h
@@ -1,554 +0,0 @@-/*-** Copyright (C) 1999-2006 Erik 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>--/* For the Metrowerks CodeWarrior Pro Compiler (mainly MacOS) */--#if	(defined (__MWERKS__))-#include	<unix.h>-#else-#include	<sys/types.h>-#endif--#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 */--	/* 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) */--	/* 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_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_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_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,--	/* 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-} ;--/*-** 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_DATE--enum-{	/* True and false */-	SF_FALSE	= 0,-	SF_TRUE		= 1,--	/* Modes for opening files. */-	SFM_READ	= 0x10,-	SFM_WRITE	= 0x20,-	SFM_RDWR	= 0x30-} ;--/* 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-} ;--/* 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 can be one of loff_t (Linux), off_t (*BSD),-** off64_t (Solaris), __int64_t (Win32) etc.-*/--typedef __int64	sf_count_t ;--#define SF_COUNT_MAX		0x7FFFFFFFFFFFFFFFLL--/* A pointer to a SF_INFO structure is passed to sf_open_read () and filled in.-** On write, the SF_INFO structure is filled in by the user and passed into-** sf_open_write ().-*/--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.-*/-typedef struct-{	char			description [256] ;-	char			originator [32] ;-	char			originator_reference [32] ;-	char			origination_date [10] ;-	char			origination_time [8] ;-	int				time_reference_low ;-	int				time_reference_high ;-	short			version ;-	char			umid [64] ;-	char			reserved [190] ;-	unsigned int	coding_history_size ;-	char			coding_history [256] ;-} SF_BROADCAST_INFO ;--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_perror () or sf_error_str ().-** 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_perror () or sf_error_str ().-** 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 three 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) ;--/* 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) ;--#ifdef __cplusplus-}		/* extern "C" */-#endif	/* __cplusplus */--#endif	/* SNDFILE_H */