ref: bf3d57bb4db8565a1a86268fc10a1a2b4196fb6d
parent: a58d434a5ed3eb10023fd2c04aba3252569b3d34
author: Erik de Castro Lopo <erikd@mega-nerd.com>
date: Sat Mar 15 12:05:19 EDT 2008
Preliminary Win32 updates.
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,9 @@
* src/* tests/*
Remove all traces of old SRC_OLD_SINC_* converters.
+ * Make.bat Win32/*
+ Preliminary Win32 updates.
+
* configure.ac
Bump version to 0.1.3.
--- a/Make.bat
+++ b/Make.bat
@@ -20,12 +20,3 @@
:END
-goto skipArchTag
-
- Do not edit or modify anything in this comment block.
- The arch-tag line is a file identity tag for the GNU Arch
- revision control system.
-
- arch-tag: 8700080b-8d9a-4852-ad8a-8ecd027f1f61
-
-:skipArchTag
--- a/Win32/Makefile.am
+++ b/Win32/Makefile.am
@@ -1,9 +1,2 @@
EXTRA_DIST = Makefile.msvc config.h unistd.h unistd.h libsamplerate.def
-
-## Do not edit or modify anything in this comment block.
-## The arch-tag line is a file identity tag for the GNU Arch
-## revision control system.
-##
-## arch-tag: fcba51ab-858b-462c-9954-66fee32b7f8f
-
--- a/Win32/config.h
+++ b/Win32/config.h
@@ -1,5 +1,5 @@
/*
-** Copyright (C) 2002-2004 Erik de Castro Lopo <erikd@mega-nerd.com>
+** Copyright (C) 2002-2008 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 General Public License as published by
@@ -53,6 +53,12 @@
/* 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 debugging. */
#define ENABLE_DEBUG 0
@@ -59,6 +65,9 @@
/* Major version of GCC or 3 otherwise. */
/* #undef GCC_MAJOR_VERSION */
+/* Define to 1 if you have the `alarm' function. */
+/* #undef HAVE_ALARM */
+
/* Define to 1 if you have the `calloc' function. */
#define HAVE_CALLOC 1
@@ -68,9 +77,6 @@
/* Define to 1 if you have the <dlfcn.h> header file. */
/* #undef HAVE_DLFCN_H */
-/* Set to 1 if you have libfftw3. */
-/* #undef HAVE_FFTW3 */
-
/* Define to 1 if you have the `floor' function. */
#define HAVE_FLOOR 1
@@ -86,9 +92,15 @@
/* Define to 1 if you have the `efence' library (-lefence). */
/* #undef HAVE_LIBEFENCE */
+/* Define to 1 if you have the `fftw' library (-lfftw). */
+/* #undef HAVE_LIBFFTW */
+
/* Define to 1 if you have the `m' library (-lm). */
/* #undef HAVE_LIBM */
+/* Define to 1 if you have the `rfftw' library (-lrfftw). */
+/* #undef HAVE_LIBRFFTW */
+
/* Define if you have C99's lrint function. */
/* #undef HAVE_LRINT */
@@ -107,6 +119,12 @@
/* Define to 1 if you have the <memory.h> header file. */
#define HAVE_MEMORY_H 1
+/* Define if you have signal SIGALRM. */
+/* #undef HAVE_SIGALRM */
+
+/* Define to 1 if you have the `signal' function. */
+/* #undef HAVE_SIGNAL */
+
/* Set to 1 if you have libsndfile. */
#define HAVE_SNDFILE 1
@@ -125,9 +143,6 @@
/* 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/times.h> header file. */
-/* #undef HAVE_SYS_TIMES_H */
-
/* Define to 1 if you have the <sys/types.h> header file. */
#define HAVE_SYS_TYPES_H 1
@@ -171,12 +186,5 @@
#define STDC_HEADERS 1
/* Version number of package */
-#define VERSION "0.1.2"
+#define VERSION "0.1.3"
-/*
-** Do not edit or modify anything in this comment block.
-** The arch-tag line is a file identity tag for the GNU Arch
-** revision control system.
-**
-** arch-tag: 7c5a8910-8149-4e89-98ce-be92835e435b
-*/
--- a/Win32/sndfile.h
+++ b/Win32/sndfile.h
@@ -1,5 +1,5 @@
/*
-** Copyright (C) 1999-2004 Erik de Castro Lopo <erikd@mega-nerd.com>
+** Copyright (C) 1999-2008 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
@@ -30,15 +30,8 @@
#define SNDFILE_1
#include <stdio.h>
+#include <sys/types.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 */
@@ -52,7 +45,7 @@
enum
{ /* Major formats. */
- SF_FORMAT_WAV = 0x010000, /* Microsoft WAV format (little endian). */
+ 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. */
@@ -68,7 +61,14 @@
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 */
+
/* Subtypes from here on. */
SF_FORMAT_PCM_S8 = 0x0001, /* Signed 8 bit data */
@@ -123,11 +123,15 @@
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,
@@ -143,6 +147,8 @@
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,
@@ -150,7 +156,7 @@
SFC_SET_UPDATE_HEADER_AUTO = 0x1061,
SFC_FILE_TRUNCATE = 0x1080,
-
+
SFC_SET_RAW_START_OFFSET = 0x1090,
SFC_SET_DITHER_ON_WRITE = 0x10A0,
@@ -160,7 +166,7 @@
SFC_GET_DITHER_INFO = 0x10A3,
SFC_GET_EMBED_FILE_INFO = 0x10B0,
-
+
SFC_SET_CLIPPING = 0x10C0,
SFC_GET_CLIPPING = 0x10C1,
@@ -167,14 +173,30 @@
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.
+ ** 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
@@ -193,9 +215,19 @@
SF_STR_SOFTWARE = 0x03,
SF_STR_ARTIST = 0x04,
SF_STR_COMMENT = 0x05,
- SF_STR_DATE = 0x06
+ SF_STR_DATE = 0x06,
+ SF_STR_ALBUM = 0x07,
+ SF_STR_LICENSE = 0x08
} ;
+/*
+** 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_LICENSE
+
enum
{ /* True and false */
SF_FALSE = 0,
@@ -204,33 +236,75 @@
/* Modes for opening files. */
SFM_READ = 0x10,
SFM_WRITE = 0x20,
- SFM_RDWR = 0x30
+ SFM_RDWR = 0x30,
+
+ SF_AMBISONIC_NONE = 0x40,
+ SF_AMBISONIC_B_FORMAT = 0x41
} ;
-/* Pubic error values. These are guaranteed to remain unchanged for the duration
-** of the library major version number.
+/* 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_NO_ERROR = 0,
SF_ERR_UNRECOGNISED_FORMAT = 1,
- SF_ERR_SYSTEM = 2
+ 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,
+ SF_CHANNEL_MAP_RIGHT,
+ SF_CHANNEL_MAP_CENTER,
+ SF_CHANNEL_MAP_FRONT_LEFT,
+ SF_CHANNEL_MAP_FRONT_RIGHT,
+ SF_CHANNEL_MAP_FRONT_CENTER,
+ SF_CHANNEL_MAP_REAR_CENTER,
+ SF_CHANNEL_MAP_REAR_LEFT,
+ SF_CHANNEL_MAP_REAR_RIGHT,
+ SF_CHANNEL_MAP_LFE,
+ SF_CHANNEL_MAP_FRONT_LEFT_OF_CENTER,
+ SF_CHANNEL_MAP_FRONT_RIGHT_OF_CENTER,
+ SF_CHANNEL_MAP_SIDE_LEFT,
+ SF_CHANNEL_MAP_SIDE_RIGHT,
+ SF_CHANNEL_MAP_TOP_CENTER,
+ SF_CHANNEL_MAP_TOP_FRONT_LEFT,
+ SF_CHANNEL_MAP_TOP_FRONT_RIGHT,
+ SF_CHANNEL_MAP_TOP_FRONT_CENTER,
+ SF_CHANNEL_MAP_TOP_REAR_LEFT,
+ SF_CHANNEL_MAP_TOP_REAR_RIGHT,
+ SF_CHANNEL_MAP_TOP_REAR_CENTER
+} ;
+
+
/* 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.
+/* 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. On windows, we need to allow the same
+** header file to be compiler by both GCC and the microsoft compiler.
*/
-typedef __int64 sf_count_t ;
+#ifdef _MSCVER
+typedef __int64_t sf_count_t ;
+#define SF_COUNT_MAX 0x7fffffffffffffffi64
+#else
+typedef loff_t sf_count_t ;
+#define SF_COUNT_MAX 0x7FFFFFFFFFFFFFFFLL
+#endif
-#define SF_COUNT_MAX 0x7FFFFFFFFFFFFFFFi64
/* 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
@@ -261,13 +335,13 @@
typedef struct
{ int format ;
- const char *name ;
- const char *extension ;
+ 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
+** 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.
*/
@@ -295,26 +369,91 @@
sf_count_t length ;
} SF_EMBED_FILE_INFO ;
-/* Struct used to retrieve music sample information from a file.
+/*
+** 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 basenote ;
- int gain ;
- int sustain_mode ;
- int sustain_start, sustain_end ;
- int release_mode ;
- int release_start, reslease_end ;
+{ 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 ;
-/* sustain_mode and release_mode will be one of the following. */
-enum
-{ SF_LOOP_NONE = 800,
- SF_LOOP_FORWARD,
- SF_LOOP_BACKWARD,
+
+/* 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 ().
@@ -329,7 +468,7 @@
** 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
+** 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().
@@ -337,13 +476,15 @@
SNDFILE* sf_open_fd (int fd, int mode, SF_INFO *sfinfo, int close_desc) ;
-/* sf_error () returns a error number which can be translated to a text
+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
+/* sf_strerror () returns to the caller a pointer to the current error message for
** the given SNDFILE.
*/
@@ -350,7 +491,7 @@
const char* sf_strerror (SNDFILE *sndfile) ;
/* sf_error_number () allows the retrieval of the error string for each internal
-** error number.
+** error number.
**
*/
@@ -403,7 +544,7 @@
*/
sf_count_t sf_read_raw (SNDFILE *sndfile, void *ptr, sf_count_t bytes) ;
-sf_count_t sf_write_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.
@@ -416,16 +557,16 @@
*/
sf_count_t sf_readf_short (SNDFILE *sndfile, short *ptr, sf_count_t frames) ;
-sf_count_t sf_writef_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, 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, 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, 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.
@@ -433,16 +574,16 @@
*/
sf_count_t sf_read_short (SNDFILE *sndfile, short *ptr, sf_count_t items) ;
-sf_count_t sf_write_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, 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, 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, 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.
@@ -451,17 +592,15 @@
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 */
-
-/*
-** Do not edit or modify anything in this comment block.
-** The arch-tag line is a file identity tag for the GNU Arch
-** revision control system.
-**
-** arch-tag: 906bb197-18f2-4f66-a395-b4722bab5114
-*/
-