diff options
author | Lorry <lorry@roadtrain.codethink.co.uk> | 2012-07-18 20:35:05 +0100 |
---|---|---|
committer | Lorry <lorry@roadtrain.codethink.co.uk> | 2012-07-18 20:35:05 +0100 |
commit | aceb1f30497619786f1827e4c65992b890a07410 (patch) | |
tree | ce33ac9d0d076a8ec4f993e614cf71a4d5daa7e7 /doc | |
download | libsndfile-aceb1f30497619786f1827e4c65992b890a07410.tar.gz |
Tarball conversion
Diffstat (limited to 'doc')
-rw-r--r-- | doc/AUTHORS | 14 | ||||
-rw-r--r-- | doc/ChangeLog | 9044 | ||||
-rw-r--r-- | doc/FAQ.html | 849 | ||||
-rw-r--r-- | doc/Makefile.am | 10 | ||||
-rw-r--r-- | doc/Makefile.in | 485 | ||||
-rw-r--r-- | doc/NEWS | 175 | ||||
-rw-r--r-- | doc/README | 65 | ||||
-rw-r--r-- | doc/api.html | 781 | ||||
-rw-r--r-- | doc/bugs.html | 77 | ||||
-rw-r--r-- | doc/command.html | 1605 | ||||
-rw-r--r-- | doc/dither.html | 1017 | ||||
-rw-r--r-- | doc/embedded_files.html | 47 | ||||
-rw-r--r-- | doc/index.html | 494 | ||||
-rw-r--r-- | doc/libsndfile.css | 90 | ||||
-rw-r--r-- | doc/libsndfile.css.in | 90 | ||||
-rw-r--r-- | doc/libsndfile.jpg | bin | 0 -> 22043 bytes | |||
-rw-r--r-- | doc/lists.html | 52 | ||||
-rw-r--r-- | doc/new_file_type.HOWTO | 135 | ||||
-rw-r--r-- | doc/octave.html | 118 | ||||
-rw-r--r-- | doc/pkgconfig.html | 71 | ||||
-rw-r--r-- | doc/sndfile_info.html | 53 | ||||
-rw-r--r-- | doc/tutorial.html | 34 | ||||
-rw-r--r-- | doc/win32.html | 53 |
23 files changed, 15359 insertions, 0 deletions
diff --git a/doc/AUTHORS b/doc/AUTHORS new file mode 100644 index 0000000..b7e2232 --- /dev/null +++ b/doc/AUTHORS @@ -0,0 +1,14 @@ +The main author of libsndfile is Erik de Castro Lopo <erikd@mega-nerd.com> +apart from code in the following directories: + + - src/GSM610 : Written by Jutta Degener <jutta@cs.tu-berlin.de> and Carsten + Bormann <cabo@cs.tu-berlin.de>. They should not be contacted in relation to + libsndfile or the GSM 6.10 code that is part of libsndfile. Their original + code can be found at: + + http://kbs.cs.tu-berlin.de/~jutta/toast.html + + - src/G72x : Released by Sun Microsystems, Inc. to the public domain. Minor + modifications were required to integrate these files into libsndfile. The + changes are listed in src/G72x/ChangeLog. + diff --git a/doc/ChangeLog b/doc/ChangeLog new file mode 100644 index 0000000..cb29658 --- /dev/null +++ b/doc/ChangeLog @@ -0,0 +1,9044 @@ +2011-07-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * NEWS README configure.ac doc/*.html + Updates for 1.0.25. + +2011-07-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sfconfig.h + Add handling for HAVE_SYS_WAIT_H. + + * Makefile.am src/Makefile.am tests/Makefile.am + Add 'checkprograms' target. + +2011-07-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h src/sndfile.c + Purge SF_ASSERT macro. Use standard C assert instead. + + * src/paf.c src/common.h src/sndfile.c + Fix for Secunia Advisory SA45125, heap overflow (heap gets overwritten with + byte value of 0) due to integer overflow if PAF file handler. + + * src/ima_adpcm.c src/ms_adpcm.c src/paf.c + Use calloc instead of malloc followed by memset. + + * tests/utils.tpl + Clean up use of memset. + +2011-07-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/ogg.c + Fix log message. + + * tests/format_check_test.c + Fix compiler warnings. + +2011-07-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Fix error message for erro code SFE_ZERO_MINOR_FORMAT. + + * tests/format_check_test.c + Add a test to for SF_FINFO format field validation. + + * src/ogg.c src/ogg_vorbis.c src/ogg.h src/ogg_pcm.c src/ogg_speex.c + src/common.h src/Makefile.am + Move vorbis specific code to ogg_vorbis.c, add new files for handling PCM + and Speex codecs in an Ogg container. The later two are only enabled with + ENABLE_EXPERIMENTAL_CODE config variable. + +2011-06-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/strings.c + Clean up and refactor storage of SF_STR_SOFTWARE. + +2011-06-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.h.in doc/api.html + Fix definition of SF_STR_LAST and update SF_STR_* related docs. Thanks to + Tim van der Molen for the patch. + +2011-06-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * programs/sndfile-interleave.c + Fix handling of argc. Thanks to Marius Hennecke. + + * src/wav_w64.c + Accept broken WAV files with blockalign == 0. Thanks to Olivier Tristan for + providing example files. + + * src/wav.c + Jump over 'FLLR' chunks. + +2011-06-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.h.in + Fix -Wundef warning due to ENABLE_SNDFILE_WINDOWS_PROTOTYPES. + + * configure.ac + Add -Wundef to CFLAGS. + + * src/ogg.c + Fix -Wunder warning. + +2011-05-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Use int64_t instead of off_t when they are the same size. + + * src/Makefile.am tests/Makefile.am + Use check_PROGRAMS instead of noinst_PROGRAMS where appropriate. + +2011-05-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c + Don't allow unknown and/or un-editable chunks to prevent the file from being + opened in SFM_RDWR mode. + +2011-04-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/format_check_test.c + Fix segfault in test program. + +2011-04-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/format_check_test.c + New test program to check to make sure that sf_open() and sf_check_format() + agree as to what is a valid program. + + * tests/Makefile.am tests/test_wrapper.sh.in + Hook into build and test runner. + + * src/sndfile.c + Fix some sf_format_check() problems. Thanks to Charles Van Winkle for the + notification. + +2011-04-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/caf.c + Add validation to size of 'data' chunk and fix size of written 'data' + chunk. Thanks to Michael Pruett for reporting this. + +2011-03-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/* tests/* programs/* + Fix a bunch of compiler warnings with gcc-4.6. + +2011-03-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/util.tpl + Add NOT macro to util.h. + + * src/strings.c + Fix handling of SF_STR_SOFTWARE that resulted in a segfault due to calling + strlen() on an unterminated string. Thanks to Francois Thibaud for reporting + this problem. + + * tests/string_test.c + Add test for SF_STR_SOFTWARE segfault bug. + + * configure.ac + Sanitize FLAC_CFLAGS value supplied by pkg-config which returns a value of + '-I${includedir}/FLAC'. However FLAC also provides an include file + <assert.h> which clashes with the Standard C header of the same name. The + solution is strip the 'FLAC' part off the end and include all FLAC headers + as <FLAC/header.h>. + + * configure.ac src/Makefile.am + Use non-recursive make in src/ directory. + +2011-03-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * NEWS README docs/*.html + Updates for 1.0.24 release. + +2011-03-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Fix up usage of sed (should not assume GNU sed). + + * M4/add_(c|cxx)flags.m4 + Test flags in isolation. + + * tests/cpp_test.cc + Fix a broken test (test segfaults). Report by Dave Flogeras. + +2011-03-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * programs/common.[ch] + Add function program_name() which returns the program name minus the path + from argv [0]. + + * programs/*.c programs/Makefile.am + Use program_name() where appropriate. Fix build. + +2011-03-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c + For u-law and A-law files, write an 18 byte 'fmt ' chunk instead of a 16 + byte one. Win98 accepts files with a 16 but not 18 byte 'fmt' chunk. Later + version accept 18 byte but not 16 byte. + +2011-03-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/FAQ.html + Add examples for question 12. + + * doc/libsndfile.css.in + Add tweaks for h4 element. + + * doc/api.html + Add documentation for virtual I/O functionality. Thanks to Uli Franke. + + * tests/util.tpl + Add static inline functions sf_info_clear() and sf_info_setup(). + + * tests/(alaw|dwvw|ulaw)_test.c + Use functions sf_info_clear() and sf_info_setup(). + +2011-03-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Fail more gracefully if pkg-config is missing. Suggestion from Brian + Willoughby. + +2011-02-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.c + Use size_t instead of int for size params with varargs. + +2011-02-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/index.html + Update supported platforms with more Debian platforms and Android. + +2011-01-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.hh + Add an LPCWSTR version of the SndfileHandle constructor to the SndfileHandle + class definition. Thanks to Eric Eizenman for pointing out this was missing. + + * tests/cpp_test.cc + Add test for LPCWSTR version of the SndfileHandle constructor. + +2011-01-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * programs/sndfile-play.c + Remove cruft. + +2010-12-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.hh + Add methods rawHandle() and takeOwnership(). Thanks to Tim Blechmann for + the patch. + + * tests/cpp_test.cc + Add tests for above two methods. Also supplied by Tim Blechmann. + +2010-11-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/api.html + Add mention of use of sf_strerror() when sf_open() fails. + +2010-11-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Make TYPEOF_SF_COUNT_T int64_t where possible. This may fix problems where + people are compiling on a 64 bit system with the GCC -m32 flag. + + * src/sndfile.h.in + Fix comments on sf_count_t. + +2010-10-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c + Handle non-zero offset field in SSND chunk. Thanks to Michael Chinen. + +2010-10-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Sed fix for FreeBSD. Thanks Tony Theodore. + +2010-10-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * shave.in M4/shave.m4 + Fix shave invocation of windres compiler. Thanks Damien Lespiau (upstream + shave author). + + * configure.ac M4/shave.m4 shave-libtool.in shave.in + Switch from shave to automake-1.11's AM_SILENT_RULES. + +2010-10-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * shave-libtool.in shave.in + Sync to upstream version. + + * src/rf64.c + More work to make the parser more robust and accepting of mal-formed files. + +2010-10-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h + Add functions psf_strlcpy() and psf_strlcat(). + + * src/broadcast.c src/sndfile.c src/strings.c src/test_main.c + src/test_main.h src/test_strncpy_crlf.c + Use functions psf_strlcpy() and psf_strlcat() as appropriate. + + * tests/string_test.c + Add tests for SF_STR_GENRE and SF_STR_TRACKNUMBER. + + * src/rf64.c + Fix size of 'ds64' chunk when writing RF64. + +2010-10-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * programs/*.c + Add the libsndfile version to the usage message of all programs. + +2010-10-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac src/version-metadata.rc.in src/Makefile.am + Add version string resources to the windows DLL. + + * doc/api.html + Update to add missing SF_FORMAT_* values. Closed Debian bug #545257. + + * NEWS README configure.ac doc/*.html + Updates for 1.0.23 release. + +2010-10-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/pedantic-header-test.sh.in + Handle unusual values of CC environment variable. + + * src/rf64.c + Minor tweaks and additional sanity checking. + + * src/Makefile.am src/binheader_writef_check.py + Use python 2.6. + +2010-10-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.hh + Add a missing 'inline' before a constructor defintion. + +2010-10-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h + Add macro NOT. + + * src/rf64.c + Minor tweaks. + + * Makefile.am */Makefile.am + Add *~ to CLEANFILES. + +2010-10-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Fix a typo in the error string for SFE_OPEN_PIPE_RDWR. Thanks to Charles + Van Winkle for the report. + +2010-10-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/flac.c src/ogg.c src/sndfile.h.in src/strings.c src/wav.c + Add ability to read/write tracknumber and genre to flac/ogg/wav files. + Thanks to Matti Nykyri for the patch. + + * src/common.h src/broadcast.c src/strings.c + Add function psf_safe_strncpy() and use where appropriate. + +2010-10-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * NEWS README configure.ac doc/*.html + Updates for 1.0.22 release. + +2010-10-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h src/broadcast.c src/rf64.c src/sndfile.c src/wav.c + Rewrite of SF_BROADCAST_INFO handling. + + * src/test_broadcast_var.c tests/command_test.c + Tweak SF_BROADCAST_INFO tests. + + * src/test_broadcast_var.c + Fix OSX stack check error. + +2010-09-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sds.c + Set sustain_loop_end to 0 as suggested by Brian Lewis. + +2010-09-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sds.c + Make sure the correct frame count gets written into the header. + + * tests/write_read_test.tpl + Don't allow SDS files to have a long frame count. + +2010-09-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sds.c + Apply a pair of patches from Brian Lewis to fix the packet number location + and the checksum. + +2010-09-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c src/file_io.c src/ogg.c src/rf64.c src/sndfile.c + src/strings.c src/test_audio_detect.c src/test_strncpy_crlf.c + src/wav.c tests/pcm_test.tpl + Fix a bunch of minor issues found using static analysis. + +2010-08-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/test_broadcast_var.c + New file containing tests for broadcast_set_var(). + + * src/Makefile.am src/test_main.[ch] + Hook test_broadcast_var.c into tests. + +2010-08-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/broadcast.c src/common.(c|h) + Move function strncpy_crlf() to src/common.c so the function can be tested + in isolation. + + * src/test_strncpy_crlf.c + New file. + + * src/Makefile.am src/test_main.[ch] + Hook test_strncpy_crlf.c into tests. + +2010-08-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h + Move code around to make comments make sense. + + * src/broadcast.c + Add debugging code that is disabled by default. + +2010-08-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/flac.c + When the file meta data says the file has zero frames set psf->sf.frames + to SF_COUNT_MAX. Fixes Debian bug #590752. + + * programs/sndfile-info.c + Print 'unknown' if frame count == SF_COUNT_MAX. + +2010-06-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Only support writing mono SVX files. Multichannel SVX files are not + interleaved and there is no support infrastructure to cache and write + multiple channels to create a non-interleaved file. + + * src/file_io.c + Don't call close() on a file descriptor of -1. Thanks to Jeremy Friesner + for the bug report. + +2010-06-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h + Add macro SF_ASSERT. + + * src/sndfile.c + Use SF_ASSERT to ensure sizeof (sf_count_t) == 8. + + * src/svx.c + Add support for reading and writing stereo SVX files. + +2010-05-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + When compiling with x86_64-w64-mingw32-gcc link with -static-libgcc flags. + + * programs/common.c programs/sndfile-metadata-set.c + Update metadata after the audio data is copied. Other minor fixes. Patch + from Marius Hennecke. + +2010-05-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/nist.c + Fix a regression reported by Hugh Secker-Walker. + + * src/api.html + Add comment about sf_open_fd() not working on Windows if the application + and the libsndfile DLL are linked to different versions of the Microsoft + C runtime DLL. + +2010-04-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/pedantic-header-test.sh.in + Fix 'make distcheck'. + +2010-04-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/pedantic-header-test.sh.in + New file to test whether sndfile.h can be compiled with gcc's -pedantic + flag. + + * configure.ac tests/test_wrapper.sh.in + Hook pedantic-header-test into test suite. + + * src/sndfile.h.in + Fix -pedantic warning. + +2010-04-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * programs/sndfile-salvage.c programs/Makefile.am + New program to salvage the audio data from WAV/WAVEX/AIFF files which are + greater than 4Gig in size. + +2010-04-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * programs/sndfile-convert.c + Fix valgrind warning. + +2010-04-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * programs/sndfile-cmp.c + When files differ in the PCM data, also print the difference offset. + Minor cleanup. + +2010-03-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c + Don't use the 'twos' marker for 24 and 32 bit PCM, use 'in24' and 'in32' + instead. Thanks to Paul Davis (Ardour) for this suggestion. + +2010-02-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Clean up configure report. + + * tests/utils.tpl + Add functions test_read_raw_or_die and test_write_raw_or_die. + + * tests/rdwr_test.(def|tpl) tests/Makefile.am + Add new test program and hook into build. + + * src/sndfile.c + Fix minor issues with sf_read/write_raw(). Bug reported by Milan Křápek. + + * tests/test_wrapper.sh.in + Add rdwr_test to the test wrapper script. + +2010-02-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Remove -fpascal-strings from OSX's OS_SPECIFIC_CFLAGS. + + * programs/common.[ch] programs/sndfile-metadata-set.c + Apply a patch from Robin Gareus allowing the setting of the time reference + field of the BEXT chunk. + +2010-02-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/ima_adpcm.c + Add a fix from Jonatan Liljedahl to handle predictor overflow when decoding + IMA4. + +2010-01-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.hh + Add a constructor which takes an existing file descriptor and then calls + sf_open_fd(). Patch from Sakari Bergen. + +2010-01-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * programs/sndfile-deinterleave.c programs/sndfile-interleave.c + Improve usage messages. + +2010-01-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/id3.c src/Makefile.am + Add new file src/id3.c and hook into build. + + * src/sndfile.c src/common.h + Detect and skip and ID3 header at the start of the file. + +2010-01-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * programs/common.c + Fix update_strings() copyright, comment, album and license are correctly + written. Thanks to Todd Allen for reporting this. + + * man/Makefile.am + Change GNU makeism to something more widely supported. Thanks to Christian + Weisgerber for reporting this. + + * configure.ac programs/Makefile.am programs/sndfile-play.c + Apply patch from Christian Weisgerber and Jacob Meuserto add support for + OpenBSD's sndio. + +2010-01-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/api.html + Discourage the use of sf_read/write_raw(). + +2009-12-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Test for Unix pipe() and waitpid() functions. + + * src/sfconfig.h tests/pipe_test.tpl + Disable pipe_test if pipe() and waitpid() aren't available. + +2009-12-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac src/Makefile.am src/create_symbols_file.py + src/make-static-lib-hidden-privates.sh + Change name of generated file src/Symbols.linux to Symbols.gnu-binutils and + and use the same symbols file for other systems which use GNU binutils like + Debian's kfreebsd. + + * M4/shave.m4 shave.in + Update shave files from upstream. + +2009-12-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * man/sndfile-metadata-get.1 + Fix typo. + + * man/sndfile-interleave.1 man/Makefile.am + New man page. + +2009-12-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/ogg.c + When decoding to short or int, clip the decoded signal to [-1.0, 1.0] if + its too hot. Thanks to Dmitry Baikov for suggesting this. + + * NEWS README doc/*.html + Updates for 1.0.21. + +2009-12-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * programs/sndfile-jackplay.c man/sndfile-jackplay.1 + Remove these which will now be in found in the sndfile-tools package. + + * programs/Makefile.am man/Makefile.am + Remove build rules for sndfile-jackplay. + + * configure.ac + Remove detection of JACK Audio Connect Kit. + + * programs/sndfile-concat.c man/sndfile-concat.1 + Add new program with man page. + + * man/Makefile.am programs/Makefile.am + Hook sndfile-concat into build system. + +2009-12-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/error_test.c + Don't terminate when sf_close() returns zero in error_close_test(). + It seems that Windows 7 behaves differently from earlier versions of + Windows. + +2009-12-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac M4/*.m4 + Rename all custom macros from AC_* to MN_*. + + * programs/sndfile-interleave.c + Make it actually work. + +2009-12-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/*.html configure.ac + Corrections and clarifications courtesy of Robin Forder. + + * programs/sndfile-convert.c programs/common.[ch] + Move some code from convert to common for reuse. + + * programs/sndfile-interleave.c programs/sndfile-interleave.c + Add new programs sndfile-interleave and sndfile-deinterleave. + + * programs/Makefile.am + Hook new programs into build. + +2009-12-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/create_symbols_file.py tests/stdio_test.c tests/win32_test.c + Minor OS/2 tweaks as suggested by David Yeo. + + * tests/multi_file_test.c + Fix file creation flags on windows. Thanks to Bruce Sharpe. + + * src/sf_unistd.h + Set all group and other file create permssions to zero. + + * tests/win32_test.c + Add a new test. + +2009-11-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/print.css doc/*.html + Add a print stylesheet and update all HTML documents to reference it. + Thanks to Aditya Bhargava for suggesting this. + + * doc/index.html + Minor corrections. + +2009-11-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * sndfile.pc.in + Add a Libs.private entry to assist with static linking. + +2009-11-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/make-static-lib-hidden-privates.sh src/Makefile.am + Add a script to hide all non-public symbols in the libsndfile.a static + library. + +2009-11-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/locale_test.c + Correct usage of ENABLE_SNDFILE_WINDOWS_PROTOTYPES. + +2009-11-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/windows.c + Correct usage of ENABLE_SNDFILE_WINDOWS_PROTOTYPES. + +2009-11-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * programs/sndfile-convert.c + Allow the program to read from stdin by specifying '-' on the command line + as the input file. + + * src/sndfile.h.in + Hash define ENABLE_SNDFILE_WINDOWS_PROTOTYPES to 1 for greater safety. + + * tests/virtual_io_test.c + Add a PAF/PCM_24 test and verify the file length is not negative + immediately after openning the file for write. + +2009-10-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c + When writing loop lengths, adjust the end position by one to make up for + Microsoft's screwed up spec. Thanks to Olivier Tristan for the patch. + +2009-10-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/flac.c + Apply patch from Uli Franke allowing FLAC files to be encoded at any sample + rate. + +2009-10-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/nist.c + Fix parsing of odd ulaw encoded file provided by Jan Silovsky. + + * configure.ac + Insist on libvorbis >= 1.2.3. Earlier verions have bugs that cause the + libsndfile test suite to fail on MIPS, PowerPC and others. + See: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=549899 + +2009-10-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * man/sndfile-convert.1 + Fix warning from Debian's lintian checks. + + * man/sndfile-cmp.1 man/sndfile-jackplay.1 man/sndfile-metadata-get.1 + man/Makefile.am + Add three new minimal manpages and hook into build. + +2009-10-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/test_wrapper.sh.in + Don't run cpp_test on x86_64-w64-mingw32. + +2009-09-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/utils.tpl + On windows, make sure the open() function doesn't get called with a third + parameter of 0 which fails for no good reason. Also make sure this third + parameter doesn't get called with S_IRGRP when compiling for windows because + Wine complains. + + * src/sndfile.hh + Add a SndfileHandle constructor for windows that takes a 'const wchar_t *' + string. + + * doc/FAQ.html + Add Q/A : I'm cross compiling libsndfile for another platform. How can I + run the test suite? + + * src/create_symbols_file.py src/Makefile.am + Add Symbols.static target, a list of symbols, one per line. + +2009-09-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/test_wrapper.sh.in + Update to allow all tests to be gathered up into a testsuite tarball and + then be run using this script. + + * build-test-tarball.mk.in + Add a Make script to build a tarball of all the test binaries and the test + wrapper script. This is useful for cross compiling; you can build the + binaries, build test test tarball and transfer the test tarball to the + target machine for testing. + +2009-09-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h src/*.c + Modify SF_FILE struct to allow it to carry either 8-bit or 16-bit strings + for the file path, directory and name. Fixes for this change throughout. + + * src/windows.c src/Makefile.am + New file defining new windows only public function sf_wchar_open() which + takes a 'const wchar_t *' string (LPCWSTR) for the file name parameter. + + * src/sndfile.h.in + Add SF_CHANNEL_MAP_ABISONIC_* entries. + Add windows only defintion for sf_wchar_open(). + + * src/create_symbols_file.py + Add sf_wchar_open() to the list of public symbols (windows only). + + * tests/locale_test.c + Add a wchar_test() to test sf_wchar_open(). + +2009-09-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h src/*.c + Split file stuff into PSF_FILE struct within the SF_PRIVATE struct. + +2009-09-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c src/voc.c + When a byte is needed, use unsigned char. + + * src/ima_oki_adpcm.c src/broadcast.c src/test_ima_oki_adpcm.c + Include sfconfig.h to prevent compile errors with MinGW compilers. + + * configure.ac + Remove AM_CONFIG_HEADER due to warnings from autoconf 2.64. + + * tests/locale_test.c + Update to work with xx_XX.UTF-8 style locales. Refactoring. + +2009-09-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Set __USE_MINGW_ANSI_STDIO to 1 when compiling using MinGW compilers. + Remove unneeded AC_SUBST. + Report Host CPU/OS/vendor. + +2009-09-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Fix error message string. + + * src/flac.c + Add 88200 to the list of supported sample rates. + + * src/ogg.c + Fix compiler warning when using gcc-4.5.0. + + * programs/sndfile-info.c tests/utils.tpl + Remove WIN32 snprintf #define. + + * src/ima_adpcm.c + Fix minor bug in aiff_ima_encode_block. Thanks to Denis Fileev for finding + this. + +2009-09-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/caf.c + Use the correct C99 format specifier for int64_t. + + * M4/endian.m4 + Fix detection of CPU endian-ness when cross compiling. Thanks to Pierre + Ossman for the bug report. + + * src/caf.c src/sndfile.c + Fix reading and writing of PEAK chunks in CAF files. + + * tests/peak_chunk_test.c tests/test_wrapper.sh.in + Run peak_chunk_test on CAF files. + +2009-09-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c src/wav.c + Use the correct C99 format specifier for int64_t. + +2009-08-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/rf64.c src/sndfile.c src/wav.c src/wav_w64.h + Apply a patch (massaged slightly) from Uli Franke adding handling of the + BEXT chunk in RF64 files. + + * tests/command_test.c + Update channel_map_test() function so WAV test passes. + + * src/rf64.c + Add channel mapping and ambisonic support. + + * src/sndfile.h + Add comments showing correspondance between libsndfile channel map + defintiions and those used by Apple and MS. + + Add handling of reading/writing channel map info. + + * tests/command_test.c tests/test_wrapper.sh.in + Update channel map tests. + +2009-07-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h + Add function psf_isprint() a replacement for the standard C isprint() + function which ignores any locale settings and treats all input as ASCII. + + * src/(aiff|common|rf64|sd2|strings|svx|wav).c + Use psf_isprint() instead of isprint(). + +2009-07-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/command.c + Add string descriptions for SF_FORMAT_RF64 and SF_FORMAT_MPC2K. + +2009-06-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * programs/sndfile-play.c + Allow use of Open Sound System audio output under FreeBSD. + +2009-06-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Add patch from Conrad Parker to add --disable-jack. + +2009-05-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/alaw.c src/float32.c src/htk.c src/pcm.c src/sds.c src/ulaw.c + Fix bugs where invalid files can cause a divide by zero error (SIGFPE). + Thanks to Sami Liedes for reporting this a Debian bug #530831. + +2009-05-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/chanmap.[ch] + New files for channel map decoding/encoding. + +2009-05-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac src/sndfile.h.in + Fix MSVC definition of sf_count_t. + +2009-05-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav_w64.[ch] + Add wavex_channelmask to WAV_PRIVATE struct and add a function to convert + an array of SF_CHANNEL_MASK_* values into a bit mask for use in WAV files. + + * src/wav.c + Add ability to write the channel mask. + +2009-05-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * programs/sndfile-info.c + Add -c command line option to dump the channel map information. + + * src/wav_w64.c + Don't bail from parser if channel map bitmask is faulty. + + * src/common.h src/sndfile.c + Remove error code SFE_W64_BAD_CHANNEL_MAP which is not needed any more. + + * src/sndfile.c + On SFC_SET_CHANNEL_MAP_INFO pass the channel map command down to container's + command handler. + +2009-05-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.h.in src/common.h src/sndfile.c src/wav_w64.c + Apply a patch from Lennart Poettering (PulseAudio) to allow reading of + channel data in WAV and W64 files. + Add a test for the above. + +2009-05-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/FAQ.html + Update the section about pre-compiled binaries for Win64. + +2009-05-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h src/test_conversions.c + Be more careful when including <stdint.h> so compiling on pre-C99 platforms + (hello Slowlaris) might actually work. + + * NEWS README doc/*.html + Updates for 1.0.20. + +2009-04-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/voc.c + Fix a bug whereby opening a specially crafted VOC file could result in a + heap overflow. Thanks to Tobias Klein (http://www.trapkit.de) for reporting + this issue. + + * src/aiff.c + Fix potential (heap) buffer overflow when parsing 'MARK' chunk. + +2009-04-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/stdin_test.c + Check psf->error after opening file. + + * src/file_io.c + Fix obscure seeking bug reported by Hugh Secker-Walker. + + * tests/utils.tpl + Add check of sf_error to test_open_file_or_die(). + + * src/sndfile.c + Clear error if opening resource fork fails. + +2009-04-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/alaw_test.c tests/locale_test.c tests/ulaw_test.c + Cleanup output. + +2009-03-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/float32.c + Fix f2s_clip_array. + +2009-03-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/float32.c + In host_read_f2s call convert instead of f2s_array. + + * src/ima_adpcm.c + Remove dead code. + + * src/test_ima_oki_adpcm.c examples/generate.c tests/dither_test.c + tests/dwvw_test.c tests/fix_this.c tests/generate.c + tests/multi_file_test.c + Minor fixes. + +2009-03-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * M4/shave.m4 shave.in + Pulled update from upstream. + +2009-03-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/api.html + Add pointers to example programs in source code tarball. + +2009-03-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h + Define SF_PLATFORM_S64 for non-gcc compilers with 'long long' type. + + * configure.ac + Add documentation for --disable-external-libs and improve error handling + for that option. + + * src/sndfile.c src/sndfile.h.in src/create_symbols_file.py + Add public function sf_version_string. + + * tests/sfversion.c + Test function sf_version_string. + + * M4/shave.m4 shave-libtool.in shave.in + Add new files from 'git clone git://git.lespiau.name/shave'. + + * configure.ac + Enable shave. + + * src/Makefile.am src/binheader_writef_check.py Octave/* + Shave related tweaks. + +2009-03-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h src/caf.c src/sndfile.c + Add SF_MAX_CHANNELS (set to 256) and use it. + + * src/sndfile.h.in + Check for either _MSCVER or _MSC_VER being defined. + +2009-03-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/vorbis_test.c + Relax test slighly to allow test to pass on more CPUs etc. + +2009-03-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Detect vorbis_version_string() correctly. + +2009-03-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/index.html + Add a 'See Also' section with a link to sndfile-tools. + + * NEWS README doc/*.html + Updates for 1.0.19 release. + + * configure.ac + Fix --enable-external-libs logic. + +2009-03-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c + Fix resource leak and potential read beyond end of buffer. + + * src/nist.c + Fix reading of header value sample_n_bytes. + + * src/sd2.c src/wav.c + Fix potential read beyond end of buffer. + + * src/sndfile.c src/svx.c + Check return values of file_io functions. + + * tests/win32_test.c + Fix resource leak. + + * configure.ac + Detect the presence/absence of vorbis_version_string() in libvorbis. + + * src/ogg.c + Only call vorbis_version_string() from libvorbis if present. + +2009-02-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/win32_test.c + Don't use sprintf, even on windows. + + * src/aiff.c src/rf64.c src/wav.c + Eliminate dead code, more validation of data read from file. + +2009-02-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/ima_adpcm.c + Clamp values to a valid range before indexing ima_step_size array. + + * src/GSM610/*.c tests/*c programs/*.c src/audio_detect.c + Don't include un-needed headers. + + * programs/sndfile-info.c + Remove dead code. + + * tests/test_wrapper.sh.in + Add 'set -e' so the script exits on error. + + * src/test_ima_oki_adpcm.c + Fix read beyond end of array. + + * tests/win32_test.c + Add missing close on file descriptor. + + * src/nist.c programs/sndfile-metadata-set.c + Fix 'unused variable' warnings. + + * src/aiff.c + Fix potential memory leak in handling of 'MARK' chunk. + Remove un-needed test (unsigned > 0). + + * src/sd2.c + Improve handling of heap allocated buffer. + + * src/sndfile.c + Remove un-needed test (always true). + + * src/wav.c src/rf64.c + Ifdef out dead code that will be resurected some time in the future. + + * src/wav.c src/w64.c src/xi.c + Handle error return values from psf_ftell. + + * src/wav_w64.c + Fix handling and error checking of MSADPCM coefficient arrays. + + * regtest/*.c + Bunch of fixes. + + * src/test_file_io.c + Use snprintf instead of strncpy in test program. + +2009-02-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sd2.c + Validate data before using. + + * src/caf.c + Validate channels per frame value before using, fixing a possible integer + overflow bug, leading to a possible heap overflow. Found by Alin Rad Pop of + Secunia Research (CVE-2009-0186). + +2009-02-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * Octave/octave_test.sh + Unset TERM environment variable and export LD_LIBRARY_PATH. + +2009-02-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/file_io.c + In windows code, cast LPVOID to 'char*' in printf. + +2009-02-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * M4/octave.m4 + Clear the TERM environment before evaluating anything in Octave. This works + around problems that might occur if a users TERM settings are incorrect. + Thanks to Rob Til Freedmen for helping to debug this. + + * src/wav.c + Handle four zero bytes as a marker within a LIST or INFO chunk. + Thanks to Rogério Brito for supplying an example file. + +2009-02-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h src/*.c + Use C99 snprintf everywhere. + +2009-02-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/test_wrapper.sh.in + New file to act as the template for the test wrapper script. + + * configure.ac + Generate tests/test_wrapper.sh from the template. + + * tests/Makefile.am + Replace all tests with a single invocation of the test wrapper script. + +2009-02-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/ogg.c + Record vorbis library version string. + + * configure.ac + Require libvorbis >= 1.2.2. + + * M4/endian.m4 + Fix bracketing of function for autoconf 2.63. Thanks to Richard Ash. + + * M4/octave.m4 M4/mkoctfile_version.m4 + Clean up AC_WITH_ARG usage using AC_HELP_STRING. + +2009-02-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * Octave/Makefile.am + Use $(top_buildir) instead of $(builddir) which may not be defined. + + * M4/octave.m4 + Improve logic and status reporting. + +2009-02-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac AUTHORS NEWS README doc/*.html + Final tweaks for 1.0.18 release. + +2009-02-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * programs/sndfile-convert.c + Add 'htk' to the list of convert formats. + + * programs/sndfile-info.c + Simplify get_signal_max using SFC_CALC_SIGNAL_MAX command. + Increase size of files for which signal max will be calculated. + +2009-01-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/index.html + Fix links for SoX and WavPlay. Thanks to Daniel Griscom. + +2009-01-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * programs/sndfile-metadata-get.c + Make valgrind clean. + Clean up temp string array usage. + Error out if trying to update coding history in RDWR mode. + +2009-01-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/index.html + Fix links to versions of the LGPL. + +2008-12-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/string_test.c + Add test for RDWR mode where the file ends up shorter than when it was + opened. + + * src/wav.c + Truncate the file on close for RDWR mode where the file ends up shorter + than when it was opened. + +2008-11-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * M4/add_cflags.m4 + Fix problem with quoting of '#include'. + + * M4/add_cxxflags.m4 configure.ac + Add new file M4/add_cxxflags.m4 and use it in configure.ac. + +2008-11-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * programs/sndfile-info.c + Apply patch from Conrad Parker to calculate and display total duration when + more than one file is dumped. + +2008-11-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac src/Makefile.am + Tweaks to generation of Symbols files. + + * tests/win32_ordinal_test.c + Update tests for above changes. + +2008-11-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * programs/common.c + When merging broadcast info, make sure to clear the destination field + before copying in the new data. + + * programs/test-sndfile-metadata-set.py + Add test for the above. + + * src/broadcast.c + Fix checking of required coding_history_size. + +2008-10-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/command_test.c + Add test to detect if coding history is truncated. + + * src/broadcast.c + Fix truncation of coding history. + +2008-10-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/command_test.c + Add broadcast_coding_history_size test. + + * programs/*.[ch] + Use SF_BROADCAST_INFO_VAR to manipulate larger 'bext' chunks. + + * src/rf64.c + Add code to prevent infinite loop on malformed file. + + * src/common.h src/sndfile.c src/w64.c src/wav_w64.c + Rationalize and improve error handling when parsing 'fmt ' chunk. + + * M4/octave.m4 + Simplify and remove cruft. + Check for correct Octave version. + + * Octave/* + Reduce 3 C++ files to one, fix build for octave 3.0, fix build. + + * Octave/sndfile.cc Octave/PKG_ADD + Add Octave function sfversion which returns the libsndfile version that the + module is linked against. + + * Octave/Makefile.am + Bunch of build and 'make distcheck' fixes. + +2008-10-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * programs/common.c + Return 1 if SFC_SET_BROADCAST_INFO fails. + + * programs/test-sndfile-metadata-set.py + Update for new programs directory, exit on any error. + + * tests/error_test.c + Fix failure behaviour in error_number_test. + + * src/common.h src/sndfile.c + Add error number SFE_BAD_BROADCAST_INFO_SIZE. + + * src/* + Reimplement handling of broadcast extentioon chunk in WAV/WAVEX files. + + * src/broadcast.c + Fix generation of added coding history. + +2008-10-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * programs/sndfile-metadata-get.c programs/sndfile-info.c + Exit with non-zero on errors. + +2008-10-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-to-text.c examples/Makefile.am + Add a new example program and hook it into the build. + + * examples/ programs/ + Add a new directory programs and move sndfile-info, sndfile-play and other + real programs to the new directory, leaving example programs where they + were. + +2008-10-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/Makefile.am + Automake 1.10 MinGW cross compiling fixes. + +2008-10-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-play.c + Remove call to deprecated function snd_pcm_sw_params_get_xfer_align. + Fix gcc-4.3 compiler warnings. + + * tests/command_test.c + Fix a valgrind warning. + + * tests/error_test.c tests/multi_file_test.c tests/peak_chunk_test.c + tests/pipe_test.tpl tests/stdio_test.c tests/win32_test.c + Fix gcc-4.3 compiler warnings. + +2008-10-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/broadcast.c + Fix termination of desitination string in strncpy_crlf. + When copying BROADCAST_INFO chunk, make sure destination gets correct line + endings. + + * examples/common.c + Fix copying of BROADCAST_INFO coding_history field. + +2008-10-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/command_test.c + Add test function instrument_rw_test, but don't hook it into the testing + yet. + + * src/common.h src/command.c src/sndfile.c src/flac.c + Error code rationalization. + + * src/common.h src/sndfile.c + Set psf->error to SFE_CMD_HAS_DATA when adding metadata via sf_command() + fails due to psf->have_written being true. + + * doc/command.html + Document the SFC_GET/SET_BROADCAST_INFO comamnds. + +2008-10-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/command_test.c + Improve error reporting when '\0' is found in coding history. + Fix false failure. + +2008-10-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/broadcast.c + Convert all coding history line endings to \r\n. + + * tests/command_test.c + Add test to make sure all line endings are converted to \r\n. + +2008-10-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/broadcast.c + Changed the order of coding history fields. + + * tests/command_test.c + Update bextch test to cope with previous change. + + * examples/common.c + Add extra length check when copying broadcast info data. + +2008-10-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/utils.tpl tests/pcm_test.tpl + Update check_file_hash_or_die to use 64 bit hash. + + * tests/checksum_test.c tests/Makefile.am + Add new checksum_test specifically for lossy compression of headerless + files. + +2008-10-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/gsm610.c + Seek to psf->dataoffset before decoding first block. + + * src/sndfile.c + Fix detection of mpc2k files on big endian systems. + +2008-10-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/broadcast.c + Use '\r\n' newlines in Coding History as required by spec. + +2008-10-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/test_conversions.c + Use int64_t instead of 'long long'. + +2008-10-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-metadata-set.c + Remove --bext-coding-history-append command line option because it didn't + really make sense. + + * examples/sndfile-metadata-(get|set).c + Add usage messages. + + * examples/test-sndfile-metadata-set.py + Start work on test coding history. + +2008-09-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * README doc/win32.html + Bring these up to date. + + * src/aiff.c + Fix parsing of REX files. + +2008-09-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/file_io.c + Use intptr_t instead of long for return value of _get_osfhandle. + + * src/test_conversions.c src/test_endswap.tpl + Fix printing of int64_t values. + + * examples/sndfile-play.c + Fix win64 issues. + + * tests/win32_ordinal_test.c + Fix calling of GetProcAddress with ordinal under win64. + + * tests/utils.tpl + Fix win64 issues. + +2008-09-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/* + Rename copy_data.[ch] to common.[ch]. Fix build. + Move code from sndfile-metadata-set.c to common.c. + + * examples/Makefile.am tests/Makefile.am regtest/Makefile.am + Clean paths. + +2008-09-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/tutorial.html doc/Makefile.am + Add file doc/tutorial.html and hook into build/dist system. + +2008-09-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-metadata-set.c + Clean up handling of bext command line params. + +2008-09-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/w64.c + Add handling/skipping of a couple of new chunk types. + +2008-09-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Add -funsigned-char to CFLAGS if the compiler supports it. + + * examples/sndfile-metadata-(get|set).c + Add handling for more metadata types. + +2008-09-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h + Add macros SF_CONTAINER, SF_CODEC and SF_ENDIAN useful for splitting format + field of SF_INFO into component parts. + + * src/*.c + Use new macros everywhere it is appropriate. + +2008-09-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-bwf-set.c + Massive reworking. + +2008-08-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-bwf-set.c + Add --info-auto-create-date command line option. + + * examples/sndfile-metadata-set.c examples/sndfile-metadata-get.c + examples/Makefile.am examples/test-sndfile-bwf-set.py + Rename sndfile-bwf-(set|get).c to sndfile-metadata-(set|get).c. + Change command line args. + +2008-08-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c + Allow 'PAD ' chunk to be modified in RDWR mode. + + * src/sndfile.h.in src/sndfile.c + Add handling (incomplete) for SFC_SET_ADD_HEADER_PAD_CHUNK. + + * tests/Makefile.am tests/write_read_test.tpl tests/header_test.tpl + tests/misc_test.c + Add tests for RF64. + + * src/rf64.c + Fixes to make sure all tests pass. + + * tests/Makefile.am tests/string_test.c + Add string tests (not yet passing). + +2008-08-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/rf64.c + First pass at writing RF64 now working. + +2008-08-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-convert.c + Add SF_FORMAT_RF64 to format_map. + + * src/common.h src/sndfile.c + More RF64 support code. + + * examples/sndfile-bwf-set.c + Fix the month number in autogenerated date string and use hypen in date + instead of slash. + + * examples/test-sndfile-bwf-set.py + Update tests. + + * examples/sndfile-info.c + When called with -i or -b option, operate on all files on command line, not + just the first. + +2008-08-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/rf64.c + New file to handle RF64 (WAV like format supportting > 4Gig files). + + * src/sndfile.h.in src/common.h src/sndfile.c src/Makefile.am + Hook the above into build so hacking can begin. + + * src/pcm.c + Improve log message when pcm_init fails. + + * src/sndfile-info.c + Only calculate and print 'Signal Max' if file is less than 10 megabytes in + length. + +2008-08-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/string_test.c + Polish string_multi_set_test. + + * src/wav.c + In RDWR mode, pad the header if necessary (ie LIST chunk has moved or + length has changed). + Minor fixes in wav_write_strings. + Write PAD chunk with default endian-ness, not a specific endian-ness. + + * examples/test-sndfile-bwf-set.py + Add Python script to test sndfile-bwf-set/get. + + * examples/sndfile-bwf-set.c + Clean up and fixes. + + * src/wav.c + Merge function wavex_write_header into wav_write_header, deleting about 70 + lines of code. + + * src/common.h + Double value of SF_MAX_STRINGS. + + * tests/string_test.c + Add string tests for WAVEX and RIFX files. + + * tests/command_test.c + Add broadcast test for WAVEX files. + +2008-08-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/string_test.c + Add a new string_rdwr_test (currently failing for WAV). + Add a new string_multi_set_test (currently failing). + + * tests/command_test.c + Add new broadcast_rdwr_test (currently failing). + + * src/wav.c + Fix to WAV parser to allow 'bext' chunk to be updated in place. + In wav_write_tailer, seek to psf->dataend if its greater than zero. + + * src/sndfile.c + Make sure psf->have_written gets set correctly in mode SFM_RDWR. + + * configure.ac + Test for <sys/time.h> and gettimeofday. + + * src/common.c + Use gettimeofday() to initialize psf_rand_int32. + + * src/common.h src/sndfile.c + Add unique_id field to SF_PRIVATE struct. + + * src/common.h src/sndfile.c src/wav.c src/wav_w64.[ch] + Move wavex_ambisonic field from SF_PRIVATE struct to WAV_PRIVATE struct. + + * src/common.h src/strings.c + Add function psf_location_string_count. + +2008-08-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Test for localtime and localtime_r. + + * examples/sndfile-convert.c + In function copy_metadata(), copy broadcast info if present. + + * examples/copy_data.[ch] examples/Makefile.am + Break some functionality out of sndfile-convert.c so it can be used in + examples/sndfile-bwf-set.c. + + * tests/utils.tpl + Add new function create_short_sndfile(). + + * examples/sndfile-bwf-set.c examples/sndfile-bwf-get.c + examples/Makefile.am + Add new files and hook into build. + +2008-08-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.h.in + Fix comments. Patch from Mark Glines. + +2008-07-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/misc_test.c + Use zero_data_test on Ogg/Vorbis files. + + * src/ogg.c + Fix segfault when closing an Ogg/Vorbis file that has been opened for write + but had no actual data written to it. Bug reported by Chinoy Gupta. + + * tests/Makefile.am + Make sure to run mist_test on Ogg/Vorbis files. + +2008-07-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * regtest/Makefile.am + Use SQLITE3_CFLAGS to locate sqlite headers. + +2008-07-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/index.html doc/FAQ.html + Add notes about which versions of windows libsndfile works on. + +2008-07-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/misc_test.c + Add a test for correct handling of Ambisonic files. Thanks to Fons + Adriaensen for the test. + + * src/wav.c src/wav_w64.c + Fix handling of Ambisonic files. Thanks to Fons Adriaensen for the patch. + +2008-06-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Fix detection/enabling of external libs. + + * M4/extra_pkg.m4 M4/Makefile.am + Add m4 macro PKG_CHECK_MOD_VERSION which is a hacked version + PKG_CHECK_MODULES. The new macro prints the version number of the package + it is searching for. + +2008-06-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c + Apply a fix from Axel Röbel where if the second loop in the instrument + chunk is none, the loop mode is written into the first loop. + +2008-05-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/test_float.c src/test_main.(c|h) src/Makefile.am + Add new file to test functions float32_(le|be)_(read|write) and + double64_(le|be)_(read|write). Hook into build and testsuite. + + * src/double64.c src/float32.c + Fix bugs in functions found by test added above. Thanks to Nicolas Castagne + for reporting this bug. + + * src/sndfile.h.in + Change time_reference_(low|high) entries of SF_BROADCAST_INFO struct to + unsigned. + + * examples/sndfile-info.c + Print out the BEXT time reference in a sensible format. + +2008-05-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/*.c + Fuzz fixes. + + * src/ogg.c + Add call to ogg_stream_clear to fix valgrind warning. + + * src/aiff.c + Fix x86_64 compile issue. + + * configure.ac src/Makefile.am src/flac.c src/ogg.c + Link to external versions of FLAC, Ogg and Vorbis. + + * tests/lossy_comp_test.c tests/ogg_test.c tests/string_test.c + tests/vorbis_test.c tests/write_read_test.tpl + Fix tests when configured with --disable-external-libs. + + * tests/external_libs_test.c tests/Makefile.am + Add new test and hook into build and test suite. + + * src/command.c + Use HAVE_EXTERNAL_LIBS to ensure that the SFC_GET_FORMAT_* commands return + the right data when external libs are disabled. + +2008-05-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/write_read_test.tpl + Add a test for extending a file during write by seeking past the current + end of file. + + * src/sndfile.c + Allow seeking past end of file during write. + +2008-05-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/api.html doc/command.html + Move all information about the sf_command function to command.html and add + a link from documentation of the sf_read/write_raw function to the + SFC_RAW_NEEDS_ENDSWAP command. + + * doc/index.html doc/FAQ.html doc/libsndfile.css + Minor documentation tweaks. + +2008-05-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Add AM_PROG_CC_C_O. + +2008-04-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/error_test.c + Add a test to make sure if file opened with sf_open_fd, and then the file + descriptor is closed, then sf_close will return an error code. Thanks to + Dave Flogeras for the bug report. + + * src/sndfile.c + Make sf_close return an error is the file descriptor is already closed. + +2008-04-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Set object format to aout for OS/2. Thanks to David Yeo. + + * src/mpc2k.c src/sndfile.c src/sndfile.h.in src/common.h src/Makefile.am + Add ability to read MPC 2000 file. + + * tests/write_read_test.tpl tests/misc_test.c tests/header_test.tpl + tests/Makefile.am + Add tests for MPC 2000 file format. + + * examples/sndfile-convert.c + Allow conversion to MPC 2000 file format. + +2008-04-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/VORBIS/lib/codebook.c + Sync from upstream SVN. + + * autogen.sh configure.ac + Minor tweaks. + +2008-04-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/ogg.c + Add a patch that fixes finding the length in samples of an Ogg/Vorbis file. + The patch as supplied segfaulted and required many hours of debugging. + + * src/OGG/bitwise.c + Sync from upstream SVN. + +2008-04-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c + Fix up handling of 'APPL' chunk. Thanks to Axel Röbel for bringing up + this issue. + +2008-04-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/*.c + Add calls to sf_close() where needed. + + * tests/utils.tpl tests/multi_file_test.c + Always pass 0 as the third argument to open when OS_IS_WIN32. + +2008-04-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/test_* + Add files test_main.[ch]. + Collapse all tests into a single executable. + +2008-03-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/FLAC + Sync to upstream CVS. + +2008-03-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h + Make SF_MIN and SF_MAX macros MinGW friendly. + + * examples/sndfile-(info|play).c + Use Sleep function from <windows.h> instead of _sleep. + + * tests/locale_test.c + Disable some tests when OS_IS_WIN32. + + * src/FLAC/src/share/replaygain_anal/replaygain_analysis.c + src/FLAC/src/share/utf8/utf8.c + MinGW fixes. + +2008-03-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/FAQ.html + Tweaks to pcm16 <-> float conversion answer. + +2008-02-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/OGG + Sync to SVN upstream. + + * Makefile.am + Add 'DISTCHECK_CONFIGURE_FLAGS = --enable-gcc-werror'. + +2008-02-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-jackplay.c + Minor tweaks to warning message printed when compiled without libjack. + +2008-01-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/peak_chunk_test.c + Improve read_write_peak_test to find more errors. Inspired by example + provided by Nicolas Castagne. + + * src/aiff.c + Another SFM_RDWR fix shown up by above test. + +2008-01-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c + Fix reading of COMM encoding string. + + * src/chunk.c src/common.h src/Makefile.am + New file for storing and retrieving info about header chunks. Hook into + build. + + * src/aiff.c + Use new chunk logging to fix problem with AIFF in RDWR mode. + +2008-01-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/command.c + Add WVE to the list of major formats. + + * tests/aiff_rw_test.c + Fix error reporting. + +2008-01-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.[ch] + Add internal functions str_of_major_format, str_of_minor_format, + str_of_open_mode and str_of_endianness. + + * tests/write_read_test.tpl + Fix reporting of errors in new_rdwr_XXXX_test. + +2008-01-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-play.c + Apply patch from Yair K. to fix compiles with OSS v4. + + * src/common.h src/float32.c src/double64.c + Rename psf->float_enswap to psf->data_endswap. + + * src/sndfile.h.in src/sndfile.c src/pcm.c + Add command SFC_RAW_NEEDS_ENDSWAP. + + * tests/command.c + Add test for SFC_RAW_NEEDS_ENDSWAP. + + * doc/command.html + Document SFC_RAW_NEEDS_ENDSWAP. + + * tests/peak_chunk_test.c + Add test function read_write_peak_test. Thanks to Nicolas Castagne for the + bug report. + +2008-01-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-cmp.c + Add new example program contributed by Conrad Parker. + + * examples/Makefile.am + Hook into build. + + * doc/development.html + Change use or reconfigure.mk to autogen.sh. + +2008-01-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/win32_test.c + Add another win32 test. + + * tests/util.tpl + Add function file_length_fd which wraps fstat. + + * tests/Makefile.am + Run the multi_file_test on AU files. + + * tests/multi_file_test.c + Use function file_length_fd() instead of file_length() to overcome stupid + win32 bug. Fscking hell Microsoft sucks so much. + +2008-01-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sd2.c + Fix a rsrc parsing bug. Example file supplied by Uli Franke. + +2007-12-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/index.html + Allow use of either LGPL v2.1 or LGPL v3. + + * tests/header_test.tpl + Add header_shrink_test from Axel Röbel. + + * src/wav.c + Add fix from Axel Röbel for writing files with float data but no peak + chunk (ie peak chunk gets removed after the file is opened). + + * src/aiff.c tests/header_test.tpl + Apply similar fix to above for AIFF files. + + * src/wav.c tests/header_test.tpl + Apply similar fix to above for WAVEX files. + + * src/command.c + Add Ogg/Vorbis to 'get format' commands. + +2007-12-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/ogg.c + Fix seeking on multichannel Ogg Vorbis files. Reported by Bodo. + Set the default encoding quality to 0.4 instead of 4.0 (Bodo again). + + * tests/ogg_test.c + Add stereo seek tests. + +2007-12-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/ogg_test.c + Add a test (currently failing) for stereo seeking on Ogg Vorbis files. Test + case supplied by Bodo. + + * tests/utils.(def|tpl) + Add compare_XXX_or_die functions. + +2007-12-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c + Fix a bug where ignoring ssnd_fmt.offset and ssnd_fmt.blocksize caused + misaligned reading of 24 bit data. Thanks to Uli Franke for reporting this. + +2007-12-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/vox_adpcm.c src/ima_oki_adpcm.[ch] src/Makefile.am + Merge in code from the vox-patch branch. Thanks to Robs for the patch + which fixes a long standing bug in the VOX codec. + +2007-12-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-convert.c + Fix handling of -override-sample-rate=X option. + +2007-11-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/ogg.c src/VORBIS + Merge in Ogg Vorbis support from John ffitch of the Csound project. + +2007-11-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Recognise files with 'vox6' extension as 6kHz OKI VOX ADPCM files. Also + recognise 'vox8' as and 'vox' as 8kHz files. + + * configure.ac + Detect libjack (JACK Audio Connect Kit). + + * examples/sndfile-jackplay.c examples/Makefile.am + Add new example program to play sound files using the JACK audio server. + Thanks to Jonatan Liljedahl for allowing this to be included. + +2007-11-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/index.html + Update support table with SD2 and FLAC. + +2007-11-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Fix calculation of internal value psf->read_current when attempting to read + past end of audio data. + Remove redundant code. + + * tests/lossy_comp_test.c + Add read_raw_test to check that raw reads do not go past the end of the + audio data section. + Clean up error output messages. + + * src/sndfile.c + Add code to prevent sf_read_raw from reading past the end of the audio data. + + * tests/Makefile.am + Add the wav_pcm lossy_comp_test. + +2007-11-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac src/Makefile.am src/create_symbols_file.py + More OS/2 fixes from David Yeo. + +2007-11-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/file_io.c tests/utils.tpl tests/benchmark.tpl + Improve handling of requirements for O_BINARY as suggested by Ed Schouten. + +2007-11-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h + Fix symbol class when SF_MIN is nested inside SF_MAX or vice versa. + + * src/create_symbols_file.py + Add support for OS/2 contributed by David Yeo. + +2007-11-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * M4/gcc_version.m4 + Add macro AC_GCC_VERSION to detect GCC_MAJOR_VERSION and GCC_MINOR_VERSION. + + * configure.ac + Use AC_GCC_VERSION to work around gcc-4.2 inline warning stupidity. + See http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33995 + Use -fgnu-inline to prevent stupid warnings. + +2007-11-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/util.tpl + Increase the printing width for print_test_name(). + + * tests/command_test.c tests/Makefile.am + Add tests for correct updating of broadcast WAV coding history. + + * examples/sndfilehandle.cc examples/Makefile.am + Add example program using the C++ SndfileHandle class. + +2007-10-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h src/sndfile.c + Add error codes SFE_ZERO_MAJOR_FORMAT and SFE_ZERO_MINOR_FORMAT. + +2007-10-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sd2.c + Identify sample-rate/sample-size/channels by resource id. + +2007-10-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/broadcast.c src/common.h src/sndfile.c + Improvements to handling of broadcast info in WAV files. Thanks to Frederic + Cornu and other for their input. + +2007-10-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/FLAC/include/share/alloc.h + Mingw fix for SIZE_T_MAX from Uli Franke. + +2007-10-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/open_fail_test.c tests/error_test.c tests/Makefile.am + Move tests from open_fail_test.c to error_test.c and remove the former. + +2007-10-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/scale_clip_test.(def|tpl) + Add tests for SFC_SET_INT_FLOAT_WRITE command. + + * doc/command.html + Add docs for SFC_SET_INT_FLOAT_WRITE command. + + * examples/sndfile-play.c tests/dft_cmp.c + Fix gcc-4.2 warning messages. + +2007-10-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.h.in src/sndfile.c + Add command SFC_GET_CURRENT_SF_INFO. + + * src/sndfile.h.in src/sndfile.c src/create_symbols_file.py + Remove function sf_get_info (only ever in pre-release code). + + * tests/command_test.c + Add test for SFC_GET_CURRENT_SF_INFO. + +2007-10-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c + Add parsing of 'exif' chunks. Originally coded by Trent Apted. + + * configure.ac + Put config stuff in Cfg directory. + Remove check for inttypes.h. + +2007-10-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/w64.c + Fix writing of 'riff' chunk length and check for correct value in parser. + +2007-09-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/index.html + Link to MP3 FAQ entry. + +2007-09-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/flac.c + Move the blocksize check to an earlier stage of flac_buffer_copy. + +2007-09-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/FLAC + Huge merge from FLAC upstream. + +2007-09-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/*.c + Change license to all example programs to BSD. + +2007-09-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/FLAC/include/FLAC/metadata.h + Include <sys/types.h> to prevent compile error on OSX. + + * Octave/octave_test.sh + Disable test on OSX. Can't get it to work. + + * src/flac.c + Check the blocksize returned from the FLAC decoder to prevent buffer + overruns. Reported by Jeremy Friesner. Thanks. + +2007-09-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * Makefile.am M4/octave.m4 + Fix build when Octave headers are not present. + +2007-08-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/development.html + Add note about bzr repository directory looking empty. + +2007-08-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac Octave/* M4/octave_* + Bunch of changes to add ability to build GNU Octave modules to read/write + sound files using libsndfile from Octave. + +2007-08-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * acinclude.m4 configure.ac ... + Get rid of acinclude.m4 and replace it with an M4 directory. + +2007-08-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.h.in + Remove crufty Metrowerks compiler support. Allow header file to be compiled + on windows with both GCC and microsoft compiler. + +2007-08-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/dft_cmp.[ch] tests/floating_point_test.tpl + Clean up floating point tests. + +2007-08-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c + Fix segfault when COMM chunk length is byte swapped. + +2007-08-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h src/mat4.c src/mat5.c src/sndfile.c + Add a generic SFE_CHANNEL_COUNT_ZERO error, remove format specific errors. + + * src/au.c + Fix crash on AU files with zero channel count. Reported by Ben Alison. + +2007-08-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/voc.c + Fix bug in handling file supplied by Matt Olenik. + +2007-07-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/OGG + Merge from OGG upstream sources. + +2007-07-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/FLAC + Merge from FLAC upstream sources. + +2007-07-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/flac.c + Fix memory leak; set copy parameter to FALSE in call to + FLAC__metadata_object_vorbiscomment_append_comment. + + * src/common.[ch] + Add function psf_rand_int32(). + +2007-07-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/FLAC + Merge from FLAC upstream sources. + + * src/strings.c tests/string_test.c tests/Makefile.am + Make sure string tests for SF_STR_LICENSE actually works. + +2007-07-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/string_test.c + Add ability to test strings stored in metadata secion of FLAC files. + + * src/string.c + Fix logic for testing if audio data has been written and string is added. + Make sure SF_STR_ALBUM actually works. + + * src/flac.c + Finalize reading/writing string metadata. Tests pass. + + * src/sndfile.h.in tests/string_test.c src/flac.c + Add string type SF_STR_LICENSE, update test and use for FLAC files. + + * src/sndfile.h.in + Add definition for SFC_SET_SCALE_FLOAT_INT_WRITE command. + + * src/common.h src/double64.c src/float32.c src/sndfile.c + Add support for SFC_SET_SCALE_FLOAT_INT_WRITE (still needs testing). + +2007-07-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/flac.c + Apply patch from Ed Schouten to read artist and title metadata from FLAC + files. + Improve reporting of FLAC metadata. + + * src/sndfile.h.in tests/string_test.c src/flac.c + Add string type SF_STR_ALBUM, update test and use for FLAC files. + +2007-06-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/FLAC/* + Merge from upstream CVS. + +2007-06-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/FLAC/* + Update from upstream CVS. + +2007-06-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/cpp_test.cc + Add extra tests for when the SndfileHandle constructor fails. + + * src/sndfile.hh + Make sure failure to open the file in the constructor does not allow later + calls to other methods to fail. + +2007-06-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/util.tpl + Add function write_mono_file. + + * tests/generate.[ch] tests/Makefile.am + Add files generate.[ch] and hook into build. + + * tests/write_read_test.tpl + Add multi_seek_test. + + * src/flac.c + Fix buffer overflow bug. Test provided by Jeremy Friesner and fix provided + by David Viens. + +2007-06-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/FAQ.html + Minor update. + + * configure.ac src/FLAC/src/libFLAC/ia32/Makefile.am src/Makefile.am + Apply patch from Trent Apted make it compile on Intel MacOSX. Thanks Trent. + +2007-05-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c + Fix writing of MSGUID subtypes. Thanks to Bruce Sharpe. + +2007-05-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c + Fix array indexing bug raised by Bruce Sharpe. + +2007-05-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/FLAC/src/share/getopt/getopt.c + Fix Mac OSX / PowerPC compile warnings. + + * configure.ac + Make sure WORDS_BIGENDIAN gets correctly defined for FLAC code. + +2007-05-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/FAQ.html + Add Q/A about MP3 support. + +2007-05-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/new_file_type.HOWTO + Minor updates. + +2007-05-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wve.c + Fix a couple bad parameters with psf_log_printf. + + * src/pcm.c + Improve error reporting. + + * src/common.h src/common.c + Constify psf_hexdump. + +2007-04-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/FLAC + Ditch and re-import required FLAC code. + + * configure.ac + Force FLAC__HAS_OGG variable to 1. + + * src/FLAC/src/libFLAC/stream_encoder.c + Fix compiler warnings. + +2007-04-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac tests/win32_ordinal_test.c + Detect if win32 DLL is beging generated and only run win32_ordinal_test if + true. + + * src/G72x/Makefile.am src/Makefile.am + Use $(EXEEXT) where possible. + +2007-04-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wve.c src/common.h src/sndfile.c + Complete definition of SfE_WVE_NO_WVE error message. + + * src/wve.c + Fix error in files generated on big endian systems. Robustify parsing. + +2007-04-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/double64.c + Fix clipping of double to short conversions on 64 bit systems. + + * src/flac.c regtest/database.c tests/cpp_test.cc + Fix compile warnings for 64 bit systems. + +2007-04-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c src/wav_w64.c + Use audio detect function when 'fmt ' chunk data is suspicious. + + * configure.ac + Add ugly hack to remove -Werror from some Makefiles. + +2007-04-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/GSM610/long_term.c src/macbinary3.c tests/cpp_test.cc + Add patch from André Pang to clean up compiles on OSX. + + * src/wve.c src/common.h src/sndfile.c src/sndfile.h.in + examples/sndfile-convert.c + Merge changes from Reuben Thomas to improve WVE support. + + * tests/lossy_comp_test.c tests/Makefile.am + Add tests for WVE files. + +2007-04-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.hh + Add a static SndfileHandle::formatCheck method as suggested by Jorge + Jiménez. + +2007-04-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Fixed a bug in sf_error() where the function itself was being compared + against zero. Add a check for a NULL return from peak_info_calloc. Fix a + possible NULL dereference. + +2007-04-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/flac.c + Turn off seekable flag when writing, return SFE_BAD_RDWR_FORMAT when + opening file for RDWR. + + * src/sndfile.c + Improve error message for SFE_BAD_RDWR_FORMAT. + + * src/mat4.c + Fix array indexing issue. Thanks to Ben Allison (Nullsoft) for alerting me. + +2007-03-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/FAQ.html + Add Q/A 19 on project files. + +2007-03-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Guard agains MacOSX universal binary compiles. + + * doc/FAQ.html + Add Q/A 18 and clean up Q3. + +2007-02-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c + Add support for 'in24' files. + +2007-02-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c src/wav_w64.c src/wav_w64.h + Start work towards detecting ausio codec type from the actual audio data. + + * src/audio_detect.c src/test_audio_detect.c + Add new file and its unit test. + +2007-02-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/cooledit-fixer.c examples/Makefile.am + Remove old broken example program. + +2007-02-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c src/sndfile.h.in src/create_symbols_file.py + Add function sf_get_info. + +2007-01-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-play.c + For ALSA, use the 'default' device instead of 'plughw:0'. + +2007-01-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Allow writing of WAV/WAVEX 'BEXT' chunks in SFM_RDWR mode. + +2007-01-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/development.html doc/embedded_files.html man/sndfile-play.1 + Minor documentation fixes. Thanks Reuben Thomas. + +2006-12-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-convert.c + Add -override-sample-rate command line option. + +2006-11-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/misc_test.c + Force errno to zero at start of some tests. + + * src/sndfile.c + Minor clean up of error handling. + + * configure.ac + Remove an assembler test which was failing on OSX. + +2006-11-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h + Fix the definition of SF_PLATFORM_S64 for MinGW. + + * src/FLAC/Makefile.am src/FLAC/share/grabbag/Makefile.am + Fix path problems for MinGW. + +2006-11-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sfendian.h + Add include guard. + + * src/Makefile.am src/flac.c + Clean up include paths. + + * src/test_conversions.c + New file to test psf_binheader_readf/writef functions. + + * src/Makefile.am src/test_file_io.c src/test_log_printf.c src/common.c + Clean up unit testing. + + * src/common.c + Fix a bug reading/writing 64 bit header fields. Thanks to Jonathan Woithe + for reporting this. + + * src/test_conversions.c + Complete unit test for above fix. + +2006-11-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + More refactoring to clean up psf_open_file() and vairous sf_open() + functions. + +2006-11-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c + Apply a patch from Jonathan Woithe to allow opening of (malformed) WAV + files of over 4 gigabytes. + +2006-11-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Refactor function psf_open_file() to provide a single return point. + + * tests/misc_test.c + Fix permission_test to ensure that read only file can be created. + +2006-11-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h + Add SF_PLATFORM_S64 macro as a platform independant way of doing signed 64 + bit integers. + + * src/aiff.c src/svx.c src/wav.c + Add warning in log if files are larger than 4 gigabytes in size. + +2006-11-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/FLAC src/OGG confgure.ac src/Makefile.am + Pull in all required FLAC and OGG code so external libraries are not + needed. This makes compiling on stupid fscking Windoze easier. + +2006-10-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sd2.c + Add workaround for switched sample rate and sample size. + + * src/wav.c + Add workaround for excessively long coding history in the 'bext' chunk. + +2006-10-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.h.in src/sndfile.c src/wav.c doc/command.html + Use SF_AMBISONIC_* instead of SF_TRUE/SF_FALSE. + +2006-10-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.h.in src/wav.c src/wav_w64.c src/common.h doc/command.html + Apply a patch from Fons Adriaensen to allow writing on WAVEX Ambisonic + files. Still needs a little tweaking before its ready for release. + + * src/*.c + Use the UNUSED macro to prevent compiler warnings. + +2006-10-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c + Fix a bug in parsing AIFF files with a slightly unusual 'basc' chunk. Thanks + to David Viens for providing two example files. + + * src/common.(c|h) src/aiff.c + Add a function psf_sanitize_string and use it in aiff.c. + +2006-10-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav_w64.c + Apply a patch from Fons Adriaensen which fixes a minor WAVEX GUID issue. + +2006-10-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/Makefile.am + Fix problem related to recent test coverage changes. + +2006-10-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac tests/Makefile.am + Add --enable-test-coverage configure option. + +2006-10-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.hh + Add an std::string SndfileHandle constructor. + + * tests/scale_clip_test.tpl + Fix the 'make distcheck' target. + +2006-10-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/double64.c src/float32.c + Add optional clipping on float file data to int read data conversions. + + * tests/tests/scale_clip_test.(def|tpl) + Add test for above new code. + +2006-09-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/aiff_rw_test.c + Add 'MARK' chunks to make sure they are parsed correctly. + +2006-09-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c + Fix parsing of MARK chunks. Many thanks to Sciss for generating files to + help debug the problem. + +2006-09-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h + Make the SF_MIN and SF_MAX macros at least partially type safe. + + * tests/lossy_comp_test.c + Fix overflow problems when ensuring that signalis not zero. + +2006-08-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac docs/*.html + Changes for release 1.0.17. + +2006-08-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/flac.c + Remove inline from functions called by pointer. Thanks to Sampo Savolainen + for notifying me of this. + +2006-07-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.hh + Add writeSync method. + Add copy constructor and assignment operator (thanks Daniel Schmitt). + Add methods readRaw and writeRaw. + Make read/write/readf/writef simple overlaods instead of templates (thanks + to Trent Apted for suggesting this). + + * tests/cpp_test.cc + Cleanup. Add tests. + +2006-07-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.hh + Templatize the read/write/readf/writef methods as suggested by Lars Luthman. + Prevent the potential leak of SNDFILE* pointers in the openRead/openWrite/ + openReadWrite methods. + Add const to SF_INFO pointer in Sndfile constructor. + Make the destrictor call the close() method. + + * tests/cpp_test.cc + Add more tests. + +2006-07-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/cpp_test.cc + Remove the generated file so "make distcheck" passes. + + * src/Makefile.am + Add sndfile.hh to distributed header files. + + * src/sndfile.hh + Change the license for the C++ wrapper to modified BSD. + +2006-07-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.hh + Complete it. + + * tests/cpp_test.cc + Add more tests. + +2006-07-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/utils.tpl + Add extern C to generated header file. + + * src/sndfile.hh + Work towards completing this. + + * tests/cpp_test.cc tests/Makefile.am + Add a C++ test and hook into build. + + * configure.ac + Add appropriate CXXFLAGS. + +2006-07-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Test if compiler supports -Wpointer-arith. + + * src/common.c + Fix a warning resulting from -Wpointer-arith. + +2006-07-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-play.c + Explicitly set endian-ness as well as setting 16 bit output. + + * examples/sndfile-info.c + Make sure to parse info if file fails to open. + + * src/sndfile.c + Handle parse error a little better. + + * src/wav_w64.[ch] + Minor clean up, add detection of IPP ITU G723.1. + +2006-06-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Make sure psf->dataoffset gets reset to zero when openning headersless + files based on the file name extension. + +2006-06-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/(command|lossy_comp|pcm|scale_clip)_test.c tests/fix_this.c + tests/write_read_test.(tpl|def) + Fix gcc-4.1 compiler warnings about "dereferencing type-punned pointer will + break strict-aliasing rules". + + * examples/cooledit-fixer.c + More fixes like above. + +2006-06-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/file_io.c + Fix a windows bug where the syserr string of SF_PRIVATE was not being set + correctly. + + * src/sndfile.c + Fixed a logic bug in sf_seek(). Thanks to Paul Davis for finding this. + +2006-06-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Fixed detection of S_IRGRP. + +2006-05-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * sndfile-convert.c + Add conversion SF_INSTRUMENT data when present. + +2006-05-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/development.html + Removed references to tla on windows. + + * src/common.h src/sndfile.c + Add separate void pointers for file containter and file codec data to + SF_PRIVATE struct. Still need to move all existing fdata pointers. + + * tests/write_read_test.tpl + Change the order of some tests. + + * src/aiff.c + When writing 'AIFC' files, make sure get an 'FVER' gets added. + + * src/common.h src/(dwvw|flac|g72x|gsm610|ima_adpcm|ms_adpcm|paf|sds).c + src/(sndfile|voc|vox_adpcm|xi).c + Remove fdata field from SF_PRIVATE struct and replace it with codec_data. + +2006-05-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * Win32/testprog.c Win32/Makefile.am + Add a minimal win32 test program. + + * Win32/README-precompiled-dll.txt Mingw-make-dist.sh + Update readme and Mingw build script. + +2006-05-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac acinclude.m4 + Minor fixes for Solaris. + +2006-05-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/test_endswap.(def|tpl) + Fix printf formatting for int64_t on 64 bit machines. + +2006-05-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/binhead_check.py + New file to check for bad parameters passed to psf_binheader_writef(). + + * src/Makefile.am + Hook into test suite. + + * src/voc.c src/caf.c src/wav.c src/mat5.c src/mat4.c + Fix bugs found by new test program. + + * src/double64.c + Clean up double64_get_capability(). + +2006-05-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav_w64.c + Fix a bug on x86_64 where an int was being passed via stdargs and being + read using size_t which is 64 bits. Thenks to John ffitch for giving me a + login on his box. + +2006-05-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/caf.c src/double64.c examples/sndfile-info.c tests/virtual_io_test.c + tests/utils.tpl + Fix a couple of signed/unsigned problems. + +2006-05-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/command_test.c + Add channel map tests. + + * src/common.h src/sndfile.c + Add a pointer the the SF_PRIVATE struct and make sure it gets freed in + sf_close(). + +2006-04-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac doc/(command|index|api).html NEWS README + Updates for 1.0.16 release. + + * src/sndfile.h.in + Define enums for channel mapping. + + * examples/sndfile-info.c + Clean up usage of SF_INFO struct. + +2006-04-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/util.tpl + Add function testing function exit_if_true(). + + * tests/floating_point_test.tpl + Fix a problem where the test program was not exiting when the test failed. + +2006-04-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.h.in src/sndfile.c src/common.h src/command.c + Implement new commands SFC_GET_SIGNAL_MAX and SFC_GET_MAX_ALL_CHANNELS. + + * doc/commands.html + Document new commands. Other minor updates. + + * tests/peak_chunk_test.c + Update tests for new commands. + +2006-04-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/peak_chunk_test.c + Add test for RIFX and WAVEX files. + Try and confuse the PEAK chunk writing by enabling and disabling it. + + * src/sndfile.c + Fix a bug where enabling and disabling PEAK chunk was screwing up. + +2006-03-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.h.in + Add the block of 190 reserved bytes into this struct to allow for + future expansion. + + * src/wav.c src/sndfile.c src/broadcast.c + Significant cleanup of broadcast wave stuff. + + * examples/sndfile-info.c + Fix print message. + + * tests/command_test.c tests/Makefile.am + Complete bext tests, hook test in test suite. + +2006-03-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.h.in + Make coding_history field of SF_BROADCAST_INFO struct a char array instead + of a char pointer. + + * src/sndfile.c src/common.h src/wav.c + Clean up knock on effects of above chnage. + + * examples/sndfile-info.c + Add -b command line option to usage message. + Clean up output of broadcast wave info. + + * src/wav.c + Ignore and skip the 'levl' chunk. + +2006-03-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Fix handling of --enable and --disable configure args. Thanks to Diego + 'Flameeyes' Pettenò who sent the patch. + +2006-03-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/win32.html + Make it really clear that although the MSVC++ cannot compile libsndfile, + the precompiled DLL can be used in C++ programs compiled with MSVC++. + +2006-03-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c + Fix bug in writing of INST chunk in AIFF files. + Fix potential bug in writing MARK chunks. + + * src/sndfile.c + Make sure the instrument chunk can only be written at the start of the file. + + * tests/command_test.c + Add check of log buffer. + + * tests/utils.tpl + Add usage of space character to psf_binheader_writef. + +2006-03-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/Makefile.am tests/Makefile.am + Remove --source-time argument from autogen command lines. + + * src/broadcast.c + New file for EBU Broadcast chunk in WAV files. + + * src/sndfile.c src/sndfile.h.in src/wav.c src/common.h + Add patch from Paul Davis implementing read/write of the BEXT chunk. + +2006-03-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * Win32/README-precompiled-dll.txt + New file descibing how to use the precompiled DLL. + + * Win32/Makefile.am + Add Win32/README-precompiled-dll.txt to EXTRA_DIST files. + + * configure.ac + Bump version to 1.0.15. + +2006-03-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c + On read, only add the endian flag if the file is big endian. + + * src/ms_adpcm.c + Fixed writing of APDCM coeffs in RIFX files. + + * tests/write_read_test.tpl tests/lossy_comp_test.c + Add tests for RIFX files. + +2006-03-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * Mingw-make-dist.sh + Bunch of improvements. + + * doc/win32.html + Update MinGW program versions. + +2006-03-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/create_symbols_file.py + Fix the library name in created win32 DEF file. Add correct DLL name for + Cygwin DLL. + + * Win32/Makefile.am tests/Makefile.am + Remove redundant files, add win32_ordinal_test to test suite. + + * tests/win32_ordinal_test.c + Update to do test in cygsndfile-1.dll as well. + + * doc/win32.html + Fix typo, mention that -mno-cygwin with the Cygwin compiler does not work. + + * src/wav.c src/wav_w64.c src/sndfile.c src/sndfile.h.in + Apply large patch from Jesse Chappell which adds support for RIFX files. + +2006-03-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * Makefile.am + Add Mingw-make-dist.sh to the extra dist files. + + * configure.ac + Fix setting SHLIB_VERSION_ARG for MinGW. + + * tests/win32_ordinal_test.c + New test program to test that the win32 DLL ordinals agree with the DEF + file. + +2006-03-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h + Add a static inline function to convert an int to a size_t. This will be + a compile to nothing on 32 bit CPUs and a sign extension on 64 bit CPUs. + + * src/aiff.c src/avr.c src/common.c src/xi.c src/gsm610.c + Fix an ia64 problem where a varargs function was being passed an int in + some places and a size_t in other places. + + * src/sd2.c + Add a workaround for situations where OSX seems to add an extra 0x52 bytes + to the start of the resource fork. + +2006-02-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * Mingw-make-dist.sh + Add a shell script to build the windows binary/source ZIP file. + + * doc/index.html + Add download link for windows binary/source ZIP file. Add links for GPG + signatures. + + * doc/win32.html + Remove info about building using microsoft compiler. + + * configure.ac + Bump version to 1.0.14. + +2006-02-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sd2.c + Improve logging of errors in resource fork parser. + +2006-01-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * Win32/Makefile.msvc + Replace au_g72x.* with g72x.*. Thanks to ussell Borogove. + +2006-01-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.c + Make sure return values are initialised header buffer is full. + + * src/wav.c + Add workarounds for messed up WAV files. + +2006-01-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * Win32/config.h + Undef HAVE_INTTYPES_H for win32. + + * tests/command_test.c + Don't exit on error in instrument test for XI files. + + * configure.ac + Bump version to 1.0.13. + + * doc/*.html NEWS README + Update version numbers. + +2006-01-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/xi.c + Start work on add read/write of instrument chunks. + + * src/command_test.c + Add tests for XI instrument chunk. + + * tests/largefile_test.c tests/Makefile.am + Add new test and hook it into the build system. This test will not be run + automatically because it requires 3 Gig of disk space and takes 3 minutes + to run. + +2006-01-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-play.c + Fix calculation of samples remaining in win32 code. Thanks Axel Röbel. + + * src/common.h + Make sure length of header buffer can hold header plus strings. Thanks Axel + Röbel. + +2006-01-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.h.in src/aiff.c src/wav.c + Apply a patch from John ffitch (Csound project). + Add detune field to SF_INSTRUMENT struct. + Add reading/writing instrument chunks to WAV files. + + * tests/command_test.c + Update SF_INSTRUMENT tests. + + * tests/Makefile.am + Hook instrument tests into test suite. + +2006-01-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Check for <inttypes.h> because some broken systems (like Solaris) don't have + <stdint.h> which is the 1999 ISO C standard file containing int64_t. + + * src/sfendian.h src/common.h + Use <inttypes.h> if <stdint.h> is not available. + +2005-12-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/peak_chunk_test.c + Extend and clean up tests. + + * src/sndfile.c + Fix a bug that prevented the turning off of PEAK chunks. + +2005-12-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/error_test.c + Make the test distclean correct. + + * src/file_io.c + Fix an SD2 MacOSX bug (reported by vince schwarzinger). + +2005-12-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c tests/command_test.c + Apply a big patch from John ffitch (Csound project) to add reading and + writing of instrument chunks to AIFF files. Also update the test. + +2005-12-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/aiff_rw_test.c tests/virtual_io_test.c tests/utils.tpl + Move test function dump_data_to_file() to utils.tpl. + + * tests/error_test.c tests/Makefile.am + Updates, including a new test to test that sf_error() returns a valid error + number. + +2005-12-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/list_formats.c + Make sure the SF_INFO struct is memset to all zero before being used. + Thanks to Stephen F. Booth. + + * src/sndfile.c + Make the return value of sf_error() match the API documentation. + +2005-11-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-convert.c + Allow conversion to raw gsm610. + + * src/common.h src/sndfile.c src/au.c + Remove au_nh_open() and all references to it (wasn't working anyway). + + * tests/headerless_test.c + Add new test for file extension based detection. + + * src/sndfile.c + Rejig file extension based file type detection. + +2005-11-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Add "gsm" as a recognised file extension when no magic number can be found. + + * tests/lossy_comp_test.c tests/Makefile.am + Test headerless GSM610. + +2005-11-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/api.html + Fix a minor typo and a minor error. Thanks Christoph Kobe and John Pavel. + +2005-10-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav_w64.c + Add more reporting of 'fmt ' chunk for G721 encoded files. + + * src/wav.c + Gernerate a more correct 20 byte 'fmt ' chunk rather than a 16 byte one. + +2005-10-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/G72x/g72x.[ch] + Minor cleanup of interface. + +2005-10-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/ogg.c + Removed the horribly broken and non-functional OGG implementation when + --enable-experimental was enabled. When OGG does finally work it will be + merged. + + * src/caf.c + Fix a memory leak. + +2005-10-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/g72x.c src/G72x/*.(c|h) src/common.h src/sndfile.c src/wav.c src/au.c + Add support for G721 encoded WAV files. + + * doc/index.html + Update support matrix. + + * tests/lossy_comp_test.c + For file formats that support it, add string data after the audio data and + make sure it isn't treated as audio data on read. + + * src/gsm610.c + Add code to ensure that the container close function (ie for WAV files) gets + called after the codec's close function. This allows GSM610 encoded WAV files + to have string data following the audio data. + Add an AIFF specific check on psf->datalength. + + * src/wav.c + Simplify wav_close function. + + * src/aiff.c + Make sure the tailer data gets written at an even file offset. Pad if + necessary. + + * src/common.h + Replace the close function pointer in SF_PRIVATE with separate functions + codec_close and container_close. The former is always called first. + + * src/*.c + Fix knock on effects of above. + +2005-10-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-info.c + Complete dumping SF_INSTRUMENT data. + + * src/dwvw.c src/ima_adpcm.c src/gsm610.c src/ms_adpcm.c + Add extra checks in *_init function. + + * tests/lossy_comp_test.c + Add a string comment to the end of the files to make sure that the decoder + doesn't decode beyond the end of the audio data section. + +2005-10-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-info.c + Minor code cleanup. + Start work on dumping SF_INSTRUMENT data. + +2005-10-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.h.in src/common.h src/common.c + Update definition of SF_INSTRUMENT struct and create a function to allocate + and initialize the struct (input from David Viens). + Clean up definition of SF_INSTRUMENT struct. + + * src/wav.c src/wav_w64.c + Add support for Ambisoncs B WAVEX files (David Viens). + + * src/aiff.c src/wav.c src/wav_w64.c + Start work on reading/writing the SF_INSTRUMENT data. + + * src/sndfile.c + Add code to get and set SF_INSTRUMENT data. + + * tests/command_test.* tests/Makefile.am + Add test for set and getof SF_INSTRUMENT data. + The file command_test.c is no longer autogen generated. + +2005-10-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/gsm610.c + Minor cleanup. + +2005-10-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/lossy_comp_test.c + Minor cleanup. + +2005-10-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/*.c + Ensure sfconfig.h is included before any other header file. + + * src/file_io.c + Add comments documenting the three sections of the file. + + * src/gsm610.c + Make sure SF_FORMAT_WAVEX are handled correctly. + +2005-10-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Add options to allow disabling of FLAC and ALSA. Suggested by Ben Greear. + +2005-09-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/locale_test.c + Modify the way the unicode strings were encoded so that older compilers + do not complain. Thanks Axel Röbel. + + * configure.ac + Bump the version to 1.0.12 for release. + + * NEWS README Win32/config.h doc/(FAQ|index.html|command|api).html + Update version numbers. + +2005-09-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/flac.c + Fix valgrind error and minor cleanup. + +2005-09-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/(au|paf|aiff|w64|wav|svx).c + Make sure structs are initialised. + +2005-09-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Make -Wdeclaration-after-statement work with --enable-gcc-werror configure + option. + Add -std=gnu99 (C99 plus posix style stuff like gmtime_r) to CFLAGS if the + compiler supports it. + +2005-09-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac acinclude.m4 + Add -Wdeclaration-after-statement to CFLAGS if the compilers supports it. + +2005-09-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/util.(tpl|def) + Make the test_write_*_or_die() functions const safe. + +2005-09-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/nist.c + Make sure the data offset is read from the file header. Thanks to + David A. van Leeuwen for a patch. + +2005-09-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac src/sfconfig.h + Check for <locale.h> and the function setlocale(). + Set config variables to zero if not found. + + * tests/locale_test.c tests/Makefile.am + Add new test program and hook into build/test system. + +2005-09-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h src/file_io.c + On windows, use windows specific types for file handles. + Add functions psf_init_files() and psf_use_rsrc(). + + * src/sd2.c + Make resource fork handling independant of file desciptor/handles. + + * src/sndfile.c src/test_file_io.c + Fix knock on effects. + +2005-09-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/float_cast.h + The lrint and lrintf implementations in Cygwin are both buggy and slow. + Add replacements which were pulled from the Public Domain MinGW math.h + header file. + +2005-09-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/(lossy_comp_test|virtual_io_test).c + More Valgrind fixups. + + * configure.ac + Simplify and correct configuring for Cygwin. + + * Win32/config.h Win32/sndfile.h Win32/Makefile.msvc + Update build for MSVC. + +2005-09-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/lossy_comp_test.c + Make sure to close SNDFILE when exiting test when file format is not seekable. + + * tests/(aiff_rw_test|virtual_io_test).c + Do a few valgrind fix ups. + +2005-09-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/float32.c src/double64.c + Replace floating point equality comparisons with greater/less comparisons. + Found by John Pavel using the Intel compiler. + + * src/sfconfig.h + New file to clean up issues surrounding autoconf generated preprocessor + symbols. + + * src/*.(c|h) tests/*.(c|tpl) examples/*.c + Fixed a bunch of other stuff found by John Pavel using the Intel compiler. + + * src/file_io.c + Remove Mac OS9 Metrowerks compiler specific hacks. + +2005-08-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/w64.c + Cast integer literal to sf_count_t in call to psf_binheader_writef() to + prevent Valgrind error. + +2005-08-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/command.html + Improve documentation of SF_GET_FORMAT_SUBTYPE. + +2005-08-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-convert.c + Allow files to be converted to SD2 format. + + * src/sd2.c + Fix a bug in reading and writing of SD2 files on little endian CPUs. + Thanks to Matthew Willis for finding this. + +2005-08-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/api.html + Update Note2 to point to SFC_SET_SCALE_FLOAT_INT_READ. + +2005-08-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Use $host_os instead of $target_os (thanks to Mo De Jong). + +2005-08-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/Makefile.am + Apply a patch from Mo DeJong to allow building outside of the source dir. + + * src/file_io.c + Fix psf_fsync() for win32. + + * src/wav.c src/wav_w64.(c|h) + Move some code from wav.c to wav_w64.c to improve the log output of files of + type WAVE_FORMAT_EXTENSIBLE. + +2005-08-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/create_symbols_file.py + Make sure sf_write_fsync is an exported symbol. + + * examples/sndfile-convert.c + Add support for writing VOX adpcm files. + +2005-07-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/api.html + Document the new function sf_write_sync(). + + * doc/FAQ.html + Do you plan to support XYZ codec. + +2005-07-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.h.in src/sndfile.c + Add function sf_write_sync() to the API. + + * src/common.h src/file_io.c + Low level implementation (win32 not done yet). + + * tests/write_read_test.tpl + Use the new function in the tests. + +2005-07-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h src/double64.c src/float32.c src/sndfile.c + Change the way PEAK chunk info is stored. Peaks now stored as an sf_count_t + for position and a double as the value. + + * src/aiff.c src/caf.c src/wav.c + Fix knock on effects of above changes. + + * src/caf.c + Implement 'peak' chunk for file wuth data in SF_FORMAT_FLOAT or + SF_FORMAT_DOUBLE format. + +2005-07-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/nist.c + Fix a bug where a variable was being used without being initialized. + + * src/flac.c + Add extra debug in sf_flac_meta_callback. + Make a bunch of private functions static. + + * src/aiff.c src/wav.c + Fix allocation for PEAK_CHUNK (bug found using valgrind). + +2005-07-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h + Move the peak_loc field of SF_PRIVATE to the PEAK_CHUNK struct. + Remove had_peak field of SF_PRIVATE, use pchunk != NULL instead. + Rename PEAK_CHUNK and PEAK_POS to PEAK_CHUNK_32 and PEAK_POS_32. + + * src/aiff.c src/caf.c src/wav.c src/float32.c src/double64.c + Fix knock on effects from above. + +2005-07-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c + Prevent files with unknown chunks from being opened read/write. + +2005-07-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/flac.c + Do not use psf->end_of_file because it never gets set to anything. + + * src/common.h + Remove unused SF_PRIVATE field end_of_file. + +2005-07-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.c + Change the 'S' format specifier of psf_binheader_writef() to write AIFF + style strings (no terminating character). + + * src/aiff.c + Move to new (correct) AIFF string style. Thanks to Axel Röbel for being + so persistent on this issue. + +2005-07-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Allow SFE_UNSUPPORTED_FORMAT as an error from sf_open(). + + * doc/api.html doc/command.html + Documentation updates (thanks to Kyroz for promoting these updates). + + * src/mat5.c + Modify the way the header is written. + +2005-07-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/caf.c + Add a 'free' chunk to the written file so that the audio data starts at + an offset of 0x1000. + + * src/sndfile.c + Allow SFE_UNSUPPORTED_FORMAT as an error from sf_open(). + +2005-07-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/caf.c src/sndfile.c + Add support for signed 8 bit integers. + + * tests/write_read_test.tpl + Add test for signed 8 bit integers in CAF files. + + * doc/index.html + Update matrix for signed 8 bit integers in CAF files. + +2005-07-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Update sf_check_format() to support CAF. + + * examples/sndfile-convert.c + Add support for ".caf" file extension. + + * doc/index.html + Add Apple CAF to the support matrix. + + * src/caf.c + Add file write support. + + * src/common.c + Fix printing of Frames. + + * tests/Makefile.am tests/write_read_test.tpl tests/lossy_comp_test.c + tests/header_test.tpl misc_test.c + Add tests for CAF files. + +2005-07-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/FAQ.html + Fix Q/A about reading/writing memory buffers. + + * src/caf.c + Bunch of work to support reading of CAF files. + +2005-07-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/(aiff|ima_adpcm|mat4|mat5|ms_adpcm).c examples/sndfile-play.c + Fix sign conversion errors reported by gcc-4.0. + + * src/caf.c + New file for Apple's Core Audio File format. + + * src/sndfile.c src/common.h src/sndfile.h.in src/Makefile.am + Hook new file into build system. + +2005-06-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src_wav_w64.c + Fix handling of stupidly large 'fmt ' chunks. Thanks to Vadim Berezniker + for supplying an example file. + + * src/common.h src/sndfile.c + Remove redundant error code SFE_WAV_FMT_TOO_BIG. + +2005-06-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.h.in src/common.h src/sndfile.c + Add public error value SF_ERR_MALFORMED_FILE. + + * src/sndfile.c + When parsing a file header fails and we don't have a system error, then set + the error number to SF_ERR_MALFORMED_FILE (suggested by Kyroz). + + * configure.ac + Allow sqlite support to be disabled in configure script. + + * regtest/database.c regtest/sndfile-regtest.c + Fix compiling when sqlite is missing. + +2005-06-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/file_io.c + Fix psf_is_pipe() and return value of psf_fread() when using virtual i/o. + + * src/sndfile.c + Fix VALIDATE_AND_ASSIGN_PSF macro for virtual i/o. + + * tests/virtual_io_test.c + Fill in skeleton test program. + + * tests/Makefile.am + Move virtual i/o tests to end of tests with stdio/pipe tests. + + * src/(sndfile.h.in|file_io.c|common.h|sndfile.c) tests/virtual_io_test.c + Rename some of the virtual i/o functions and data types. + +2005-06-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Fix the return values of sf_commands : SFC_SET_NORM_DOUBLE, + SFC_SET_NORM_FLOAT, SFC_GET_LIB_VERSION and SFC_GET_LOG_INFO. Thanks to + Kyroz for pointing out these errors. + + * doc/command.html + Correct documented return values for SFC_SET_NORM_DOUBLE and + SFC_SET_NORM_FLOAT. Thanks to Kyroz again. + +2005-05-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * regtest/* + Add new files for sndfile-regtest program. + + * configure.ac Makefile.am + Hook regetest into build. + + * src/wav.c src/common.c + Fix a regression where long ICMT chunks were causing the WAV parser + to exit. + +2005-05-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * libsndfile.spec.in + Add html docs to the files section as suggested by Karsten Jeppesen. + + * src/aiff.c + Fix parsing of odd length ANNO chunks. + +2005-05-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h + Change the include guard to prevent clashes with other code. + +2005-05-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-play.c + Improve error handling in code for playback under Linux/ALSA. + +2005-05-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/ircam.c + Fix writing of IRCAM files on big endian systems (thanks to Axel Röbel). + + * src/wav.c + Add workaround for files created by the Peak audio editor on Mac which can + produce files with very short LIST chunks (thanks to Jonathan Segel who + supplied the file). + +2005-04-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c + Apply a patch From David Viens to make the parsing of basc chunks more + robust. + + * src/wav.c + Another patch from David Viens to write correct wavex channel masks for + the most common channel configurations. + +2005-04-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/command.c + Only allow FLAC in the format arrays if FLAC is enabled. Thanks to + Leigh Smith. + +2005-03-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h + Add a directory field for storing the file directory to the SF_PRIVATE + struct. + + * src/sndfile.c + Grab the directory name when copying the file path. + + * src/file_io.c + Cleanup psf_open_rsrc() and also check for resource fork in + .AppleDouble/filename. + +2005-03-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/svx.c + Fix a bug in the printing of the channel count. Bug reported by Michael + Schwendt. Thanks. + +2005-01-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/paf.c + Fix a seek bug for 24 bit PAF files. + + * tests/write_read_test.tpl + Update write_read_test to trigger the previously hidden PAF seek bug. + +2005-01-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c src/w64.c src/wav.c + Do not return a header parse error when the log buffer overflows. + Continuing parsing works even on files where the log buffer does overflow. + This avoids a bug on some weirdo WAV (and other) files. + + * src/common.h src/sndfile.c + Remove SFE_LOG_OVERRIN error and its associated error message. + + * src/file_io.c + Fix a rsrc fork problem on MacOSX. + +2004-12-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile-play.c + In the ALSA output code, added call to snd_pcm_drain() just before + snd_pcm_close() as suggested by Thomas Kaeding. + In the OSS output code, added two ioctls (SNDCTL_DSP_POST and + SNDCTL_DSP_SYNC) just before the close of the audio device. + + * tests/virtual_io_test.c tests/Makefile.am + Add a new test program (currently empty) and add it to the build. + +2004-12-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.h.in src/sndfile.h src/common.h src/file_io.c + src/create_symbols_file.py + Apply patch from Steve Baker which is the beginnings of a virtual + I/O interface. + +2004-12-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/*.c src/sndfile.h.in + Const-ify the write path throughout the library. + +2004-12-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/development.html + Minor improvements. + +2004-11-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/bugs.html + Minor improvements. + +2004-11-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c + Add workaround for Logic Platinum AIFF files with broken COMT chunks. + +2004-11-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/FAQ.html + Remove some ambiguities in the SD2 FAQ answer. + +2004-11-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * Win32/sndfile.h Win32/config.h MacOS9/sndfile.h MacOS9/config.h + Updates from autoconfig versions. + +2004-11-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c + Fix parsing of COMT chunks. Store SF_STR_COMMENT data in ANNO chunks + instead of COMT chunk. + +2004-11-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/file_io.c src/common.h + Change the ptr argument to psf_write() from "void*" to a "const void*". + Thanks to Tobias Gehrig for suggesting this. + +2004-10-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/file_io.c src/common.h + Add functions psf_close_rsrc() and read length of resourse fork into + rsrclength field of SF_PRIVATE. + + * src/sd2.c + Make sure resource fork gets closed. + + * tests/util.tpl + Add functions to check for file descriptor leakage. + + * src/write_read_test.tpl + Use the file descriptor leak checks. + + * src/sndfile.h.in + Add SFC_GET_LOOP_INFO and SF_LOOP_INFO struct. + + * src/common.h + Add SF_LOOP_INFO pointer to SF_PRIVATE. + + * src/wav.c src/aiff.c + Improve and add parsing of 'ACID' and 'basc' chunks, filling in + SF_LOOP_INFO data in SF_PRIVATE. + +2004-10-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sd2.c + Further cleanup: remove printfs, change snprintf to LSF_SNPRINTF. + + * Win32/config.h Win32/sndfile.h + Updates. + + * tests/util.tpl + Add win32 macro for snprintf. + +2004-10-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sfendian.h + Add macros : H2BE_SHORT, H2BE_INT, H2LE_SHORT and H2LE_INT. + + * src/sd2.c + Use macros to make sure writing SD2 files on little endian machines works + correctly. + + * tests/util.tpl + Add a delete_file() function which also deletes the resource fork of SD2 + files. + + * tests/write_read_test.tpl + Use delete_file() so that "make distcheck" works. + +2004-10-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c src/file_io.c + Move resource filename construction and testing to psf_open_rsrc(). + + * src/common.h src/sndfile.c + Add error SFE_SD2_FD_DISALLOWED. + + * tests/util.tpl tests/*.(c|tpl) + Add and allow_fd parameter to test_open_file_or_die() so that use of + sf_open_fd() can be avoided when opening SD2 files. + +2004-10-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c + Update ACID chunk parsing. + + * src/sd2.c + More fixes for files with large resource forks. + +2004-10-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h src/sndfile.c + Add error numbers and messages for sd2 files. + + * src/sd2.c + Reading of sd2 (resource fork version) now seems to be working. + +2004-10-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/file_io.h + Update file_io.c to include win32 psf_rsrc_open(). + + * tests/floating_point_test.tpl + Remove use of __func__ in test programs (MSVC++ doesn't grok this). + + * Win32/(config|sndfile).h MacOS9/(config|sndfile).h + Updates. + +2004-10-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sfendian.h + Fix endswap_int64_t_(array|copy). + + * src/test_endswap.(tpl|def) + Add tests for above and inprove all tests. + +2004-10-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sfendian.h + Improve type safety, add endswap_double_array(). + + * src/double64.c + Use endswap_double_array() instead of endswap_long_array(). + + * src/test_endswap.(tpl|def) src/Makefile.am + Add preliminary endswap tests and hook into build system. + +2004-10-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/configure.ac src/makefile.am + Finally fix the bulding of DLLs on Win32/MinGW. + + * tests/makefile.am + Fix running of tests on Win32/MinGW. + +2004-10-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.h.in src/sndfile.c tests/floating_point_test.tpl + Rename SFC_SET_FLOAT_INT_MULTIPLIER to SFC_SET_SCALE_FLOAT_INT_READ. + + * doc/command.html + Document SFC_SET_SCALE_FLOAT_INT_READ. + +2004-09-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/floating_point_test.(tpl|def) + Derived from floating_point_test.c. + Add (float|double)_(short|int)_test functions. + + * tests/util.(tpl|def) + Make separate float and double versions of gen_windowed_sine(). + + * tests/write_read_test.tpl + Fix after changes to gen_windowed_sine(). + + * src/(float32|double64).c + Implement SFC_SET_FLOAT_INT_MULTIPPLIER. + +2004-09-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * acinclude.m4 + Fix warnings from automake 1.8 and later. + + * examples/sndfile-info.c + Add a "fflush (stdout)" after printing Win32 message. + +2004-09-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * Win32/Makefile.mingw.in + Add a "make install" target. + +2004-09-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.h.in src/common.h src/sndfile.c src/command.c + Start work on adding command SFC_SET_FLOAT_INT_MULTIPLIER. + +2004-09-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-convert.c + Fix a bug converting stereo integer PCM files to float. + +2004-09-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-play.c + Appy patch from Conrad Parker to make Mac OSX error messages more + consistent and informative. + + * doc/api.html + Fix a HTML HREF which was wrong. + + * doc/win32.html + Add information about when nmake fails. + +2004-09-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-play.c + Another patch from Denis Cote to prevent race conditions. + +2004-09-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h src/ms_adpcm.c src/ima_adpcm.c + Fix alternative to ISO standard flexible struct array feature for broken + compilers. + +2004-08-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h src/string.c src/sndfile.c + Make sf_set_string() return an error if trying to set a string when in + read mode. + +2004-08-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h + Change the unnamed union into a named union so gcc-2.95 will compile it. + + * src/*.c + Fixes to allow for the above change. + +2004-08-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-play.c + Fixes for Win32. Thanks to Denis Cote. + + * Win32/Win32/Makefile.(msvc|mingw.in) + Fix build system after removal of sfendian.h. + Build sndfile-convert. + + * src/Makefile.am + Remove sfendian.c from dependancies. + +2004-08-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.h.in + Fix typo in comments (thanks Tommi Sakari Uimonen). + +2004-07-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/(a|u)law_test.c + Minor cleanup. + +2004-07-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/(pcm|float|double64|ulaw|alaw|xi).c + Optimise read/write loops by removing a redundant variable. + +2004-07-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/file_io.c + Remove call to fsync() in psf_close(). + +2004-07-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/pcm.c + Inline x2y_array() functions where possible. + + * configure.ac + Detect presence of type int64_t. + + * src/sfendian.c src/sfendian.h + Move functions in the first file to the sfendian.h as static inline + functions. + Improve endswap_long_*() where possible. + +2004-07-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/pcm.c + When converting from unsigned char to float or double, subtract 128 before + converting to float/double rather than after to save a floating point + operation as suggested by Stefan Briesenick. + + * src/(pcm|sfendian|alaw|ulaw|double64|float32).c + Optimize inner loops by changing the loop counting slightly as suggested + by Stefan Briesenick. + + * configure.ac + Detect presence of <byteswap.h>. + + * src/sfendian.h + Use <byteswap.h> if present as suggested by Stefan Briesenick. + + * src/pcm.c + Update bytewapping. + +2004-07-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h src/*.c + Change the psf->buffer field of SF_PRIVATE into a more type safe union with + double, float, int etc elements. + +2004-06-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-play.c + Merge slightly modifed patch from Stanko Juzbasic which allows playback of + mono files on MacOSX. + +2004-06-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-convert.c + Move copy_metadata() after the second sf_open(). + +2004-06-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-convert.c + Fix a bug which caused the program to go into an infinite loop if the source + file has no meta-data. Thanks to Ron Parker for reporting this. + + * src/sndfile.h.in + Add SF_STR_FIRST and SF_STR_LAST to allow enumeration of string types. + + * Win32/sndfile.h MacOS9/sndfile.h + Update these as per the above file. + +2004-06-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac src/common.h src/ogg.c src/sndfile.c src/sndfile.h.in + src/Makefile.am + Apply large patch from Conrad Parker implementing Ogg Vorbis, Ogg Speex and + Annodex support via liboggz and libfishsound. Thanks Conrad. + +2004-06-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/avr.c src/ircam.c src/nist.c src/paf.c src/xi.c + Add cast to size_t for some parameters passed to psf_binheader_writef. This + is Debian bug number 253490. Thanks to Anand Kumria and Andreas Jochens. + + * src/w64.c + Found and fixed a bug resulting from use of size_t when writing W64 'fmt ' + chunk. + +2004-06-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Bump version to 1.0.10 ready for release. + + * Makefile.am + Remove redundant files (check_libsndfile.py libsndfile_version_convert.py) + from distribution tarball. + + * tests/header_test.tpl + Fix uninitialised variable. + + * src/GSM610/short_term.c + Fix compiler warning on MSVC++. + +2004-05-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c + Improve record keeping of chunks seen and return an error if a file with + unusual chunks is opened in mode SFM_RDWR. + + * src/mmreg.h + This file not needed so remove it. + +2004-05-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/header_test.tpl + Add extra_header_test(). + + * src/common.h src/sndfile.c + Add SFE_RDWR_BAD_HEADER error number and string. + +2004-05-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/utils.tpl tests/*.c tests/*.tpl + Add a line number argument to check_log_buffer_or_die() and update all + files that use that function. + + * tests/header_test.tpl + Modify/update tests for files opened SFM_RDWR and SFC_UPDATE_HEADER_AUTO. + + * src/aiff.c src/wav.c + Fix another bug in AIFF and WAV files opened in SFM_RDWR and using + SFC_UPDATE_HEADER_AUTO. + + * src/test_file_io.c + Add a test for psf_ftruncate() function. + +2004-05-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Fix another weird corner case bug found by Martin Rumori. Thanks. + + * tests/header_test.(tpl|def) + Two new files to test for the absence of the above bug and include tests + moved from tests/misc_test.c. + + * tests/Makefile.am + Hook new tests into build/test system. + + * tests/misc_test.c + Remove update_header_test() which has been moved to the new files above. + +2004-05-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c + Fixed a bug reported by Martin Rumori on the LAD list. If a file created + with a format of SF_FORMAT_FLOAT and then closed before any data is written + to it, the header can get screwed up (PEAK chunk gets overwritten). + + * tests/write_read_test.tpl + Add a test (empty_file_test) for the above bug. + +2004-05-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * Win32/Makefile.mingw.in + Added a Makefile for MinGW (needs to be processed by configure). + + * src/mmsystem.h src/mmreg.h + Add files from the Wine project (under the LGPL) to allow build of + sndfile-play.exe under MinGW. + +2004-05-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/GSM610/gsm610_priv.h + Replace ugly macros with inline functions. + + * src/GSM610/*.c + Remove temporary variables used by macros and other minor fixes required by + above change. + +2004-05-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/pipe_test.tpl tests/stdio_test.c Win32/Makefile.msvc + Make sure these programs compile (even though they do nothing) on Win32 + and add them to the "make check" target. + + * src/sfendian.h + Fix warning on Sparc CPU and code cleanup. + +2004-05-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/file_io.c + Fix warning messages when compiling under MinGW. + +2004-05-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Set HAVE_FLEXIBLE_ARRAY in src/config.h depending on whether the compiler + accepts the flexible array struct member as per 1999 ISO C standard. + + * src/common.h src/ima_adpcm.c src/paf.c src/ms_adpcm.c + Added ugly #if HAVE_FLEXIBLE_ARRAY and provided a non-standards compliant + hack for non 1999 ISO C compliant compilers. + +2004-04-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/strings.c + If adding an SF_STR_SOFTWARE string, only append libsndfile-X.Y.Z if the + string does not already have libsndfile in the string. Thanks to Conrad + Parker. + + * tests/string_test.c + Add test to verify the above. + + * examples/sndfile-convert.c + Add ability to transcode meta data as well (Conrad Parker). + +2004-04-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/command.html + Fix minor error. Thanks to Simon Burton. + + * doc/win32.html + Started adding instructions for compiling libsndfile under MinGW. + + * configure.ac + Add --enable-bow-docs to enable black text on a white background HTML docs. + + * doc/libsndfile.css.in + This is now a template file for configure which sets the foreground and + background colours. + +2004-04-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Do some MinGW fixes. + + * configure.ac doc/Makefile.am + Install HTML docs when doing make install. + +2004-04-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-info.c + Print out the dB level with the signal max. + +2004-04-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/file_io.c + Define S_ISSOCK in src/file_io.c if required. + +2004-04-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Improve printout configuration summary (as suggested by Axel Röbel). + + * doc/index.html + Add link to pre-release location. + + * src/sndfile.h.in + Remove comma after last element of enum. + + * src/float32.c src/double64.c + Fix read/write of float/double encoded raw files to/from pipes. + + * tests/pipe_test.c tests/pipe_test.tpl tests/pipe_test.def + Turn pipe_test.c into an autogenerated file and add tests for reading/ + writing floats and doubles. + + * tests/Makefile.am + Hook tests/pipe_test.* into build system. + +2004-04-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac acinclude.m4 + Rename AC_C_STRUCT_HACK macro to AC_C99_FLEXIBLE_ARRAY. + +2004-03-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/misc_test.c + Perform update_header_test in RDWR mode as well. + + * src/aiff.c + Fix problems when updating header in RDWR mode. + +2004-03-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c src/w64.c src/wav_w64.c + Integrate code supplied by David Viens for supporting microsoft's + WAVEFORMATEXTENSIBLE stuff. Thanks David for supplying this. + + * configure.ac doc/*.html + Bump version to 1.0.9. + +2004-03-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/command.c src/sndfile.c src/sndfile.h.in src/wav.c + Started work on supporting microsoft's WAVEFORMATEXTENSIBLE gunk. + +2004-03-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/avr.c + New file to handle Audio Visual Resaerch files. + + * src/sndfile.h.in src/common.h src/sndfile.c src/command.c + Hook AVR into everything else. + + * tests/Makefile.am tests/write_read_test.tpl tests/misc_test.c + Add testing for AVR files. + +2004-03-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/file_io.c + Fix psf_set_file() for win32. Thanks to Vincent Trussart (Plogue Art et + Technologie) for coming up with the solution. + +2004-03-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/write_read_test.tpl + Fixed a bug that was causing valgrind to report a memory leak. The bug was + in the test code itself, not the library. + +2004-03-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/generate.cs + An example showing how to use libsndfile from C#. Thanks to James Robson + for providing this. + +2004-03-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.c + Fix problems with WAV files containing large chunks after the 'data' + chunk. Thanks to Koen Tanghe for providing a sample file. + +2004-03-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Detect presense of ALSA (Advanced Linux Sound Architecture). + + * examples/sndfile-play.c + Add ALSA output support. + + * examples/Makefile.am + Add ALSA_LIBS to link line of sndfile-play.c. + +2004-03-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * acinclude.m4 + Add new macro (AC_C_STRUCT_HACK) to detect whether the C compiler allows + the use of the what is known as the struct hack introduced by the 1999 ISO + C Standard. + + * configure.ac + The last release would not compile with gcc-2.95 due to the use of features + (ie struct hack) introduced by the 1999 ISO C Standard. + Add check to make sure compiler handles this and bomb out if it doesn't. + +2004-03-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/write_read_test.tpl + Fix compiler warning on Win32. + + * src/file_io.c + Fix use of an un-initialised variable in Win32 stuff. + + * Win32/config.h examples/sndfile-play.c + Win32 fixes. + +2004-03-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Fix bug which occurres when configuring for MinGW. + If compiler is gcc and cross compiling use -nostdinc. + +2004-03-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h src/aiff.c src/wav.c src/float32.c src/double64.c + src/sndfile.c + Fix a bug with PEAK chunk handling for files with more than 16 channels. + Thanks to Remy Bruno for finding this. + +2004-03-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.c + Fix a bug which was preventing WAV files being openned correctly if the + file had a very large header. Thanks to Eldad Zack for finding this. + +2004-03-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac src/file_io.c + Fix cross-compiling from Linux to Win32 using the MinGW tools. + +2004-03-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/create_symbols_file.sh + Christian Weisgerber pointed out that the shell script did not run on a + real Bourne shell although it did run under Bash in Bourne shell mode. + + * src/create_symbols_file.py + Rewrite of above in Python. Also add support for writing Win32 .def files. + The Python script generates Symbols.linux, Symbols.darwin and + libsndfile.def (Win32 version). These files get shipped with the tarball + so there should not be necessary to run the Python script when building + the code from the tarball. + + * configure.ac src/Makefile.am Win32/Makefile.am + Hook new Python script into the build system. + +2004-02-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/configure.ac + Add --enable-gcc-werror option and move GCC specific stuff down. + +2004-02-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * acinclude.m4 configure.ac + Fix clip mode detection (tested in one of HP's testdrive Itanium II boxes). + + * src/file_io.c + Added check for sizeof (off_t) != sizeof (sf_count_t) to prevent recurrence + of missing large file support on Linux and Solaris. + +2004-02-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-play.c + Fix a MacOSX specific bug which was caused by a space being inserted in + the middle of a file name. + + * configure.ac src/Makefile.am examples/Makefile.am + Fix a couple of MacOSX build issues. + +2004-02-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/command.html + Document SFC_SET_CLIPPING and SFC_GET_CLIPPING. + +2004-02-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/*.html + Applied patch from Frank Neumann (author of lakai) which fixes many minor + typos in documentation. Thanks Frank. + +2004-02-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * ChangeLog + Changed my email address throughout source and docs. + +2004-02-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/file_io.c + Make sure config.h is included before stdio.h to make sure large file + support is enabled on Linux (and Solaris). + + * tests/misc_test.c + Disable update_header test on Win32. This should work but doesn't and + I'm not sure why. + + * Make.bat Win32/Makefile.msvc + Updates. + +2004-01-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h + Changed logindex, headindex and headend files of SF_PRIVATE from unsigned + int to int to prevent weird arithmetic bugs. + + * src/common.c src/aiff.c src/wav.c src/w64.c + Fixed compiler warnings resulting from above change. + +2004-01-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.c + Fixed a bug in header reader for some files with data after the sample data. + +2003-12-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/lossy_comp_test.c tests/Makefile.am + Add tests for AIFF/IMA files. + +2003-12-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/macbinary3.c src/macos.c + Two new files required for handling SD2 files. + + * src/common.h + Add prototypes for functions in above two files. + + * src/Makefile.am + Hook new files into build system. + +2003-12-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Add checks for mmap() and getpagesize() which might be used at some time + for faster file reads. + Add detection of MacOSX. + +2003-12-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/FAQ.html + Minor mods to pkg-config section. + +2003-12-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/create_symbols_file.sh + Andre Pang (also known as Ozone) pointed out that on MacOSX, all non + static symbols are exported causing troubles when trying to link + libsndfile with another library which has any of the same symbols. + He fixed this by supplying the MacOSX linker with a file containing + all the public symbols so that only they would be exported and then + supplied a patch for libsndfile. + This wasn't quite ideal, because I would have to maintain two (3 if + you include Win32) separate files containing the exported symbols. + A better solution was to create this script which can generate a + Symbols file for Linux, MacoSX and any other OS that supports + minimising the number of exported symbols. + + * configure.ac src/Makefile.am + Hook the new script into the build process. + +2003-12-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/index.html + Added comments about Steve Dekorte's SoundConverter scam. + +2003-12-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/file_io.c + Axel Röbel pointed out that on Mac OSX a pipe is not considered a fifo + (S_ISFIFO (st.st_mode) is false) but a socket (S_ISSOCK (st.st_mode) is + true). The test has therefore been changed to is S_ISREG and anything + which which does not return true for S_ISREG is considered a pipe. + +2003-11-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/misc_test.c + Fix update_header_test to pass SDS. + + * src/sds.c + More minor fixes. + + * tests/floating_point_test.c + Add test for SDS files. + + * src/command.c + Add SDS to major_formats array. + +2003-11-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/write_read_test.tpl tests/misc_test.c + Add tests for SDS files. + + * src/sds.c + Fix a bug in header update code. + +2003-11-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sds.c + Get file write working. + + * src/paf.c + Fix a potential bug in paf24_seek(). + +2003-11-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/FAQ.html + Add Q/A about u-law encoded WAV files. + + * Win32/*.h + Updated so it compiles on Win32. + +2003-11-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-convert.c + Add -alaw and -ulaw command line arguments. + + * configure.ac + Add library versioning comments. + Add arguments to AC_INIT. + +2003-10-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/file_io.c + Ross Bencina has contributed code to replace all of the (mostly broken) + Win32 POSIX emulation calls with calls the native Win32 file I/O API. + This code still needs testing but is likely to be a huge improvemnt + of support for Win32. Thanks Ross. + +2003-10-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/dwvw.c + Removed filedes field from the DWVW_PRIVATE struct. + + * src/file_io.c + Change psf_fopen() so it returns psf->error instead of the file descriptor. + Add new functions psf_set_stdio() and psf_set_file(). + + * src/sndfile.c + Change these to work with changed psf_fopen() return value. + Remove all uses of psf->filedes from sndfile, making it easier to slot native + Win32 API file handling functions. + + * src/test_file_io.c + Minor changes to make it compile with new file_io.c stuff. + +2003-10-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/gsm610.h + Rename a variable from true to true_flag. As Ross Bencina points out, + true is defined in the C99 header <stdbool.h>. + + * src/file_io.c + If fstat() fails, return SF_TRUE instead of -1 (Ross Bencina). + +2003-10-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h + Increase the size of SF_BUFFER_LEN and SF_HEADER_LEN. + + * src/sndfile.c + Fix sf_read/write_raw which were dividing by psf->bytwidth and + psf->blockwidth which can both be zero. + + * examples/sndfile-info.c + Increase size of BUFFER_LEN. + +2003-09-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Add checks for <sys/wait.h> and ssize_t. + Other Win32/MinGW checks. + + * src/aiff.c src/au_g72x.c src/file_io.c src/gsm610.c src/interleave.c + src/paf.c src/sds.c src/svx.c src/voc.c src/w64.c src/wav.c src/xi.c + Fix compiler warnings. + +2003-09-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/scale_clip_test.tpl + Add definition of M_PI if needed. + +2003-09-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Detect if S_IRGRP is declared in <unistd.h>. + + * src/file_io.c tests/*.tpl tests/*.c + More fixes for Win32/MSVC++ and MinGW. MinGW does have <unistd.h> but that + file doesn't declare S_IRGRP. + +2003-10-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/config.h.in + Add comment stating that the sf_count_t typedef is determined when + libsndfile is being compiled. + + * tests/utils.tpl + Modified so that utils.c gets one copy of the GPL and not two. + + +2003-09-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * Win32/unistd.h src/sf_unistd.h + Move first file to the second. This will help for Win32/MSVC++ and MinGW. + + * Win32/Makefile.am src/Makefile.am + Changed in line with above. + + * Win32/Makefile.msvc + Removed "/I Win32" which is no longer required. + + * src/file_io.c src/test_file_io.c tests/*.tpl tests/*.c + If HAVE_UNISTD_H include <unistd.h> else include <sf_unistd.h>. This should + work for Win32, MinGW and other fakes Unix-like OSes. + + * src/*.c + Removed #include <unistd.h> from files which didn't need it. + +2003-09-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * libsndfile.spec.in + Apply fix from Andrew Schultz. + +2003-09-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/vox_adpcm.c + Only set psf->sf.samplerate if the existing value is invalid. + +2003-09-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-play.c + Started adding support for ALSA output. + +2003-09-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.h.in + Removed <stdlib.h> from sndfile.h. + + * src/*.c examples/*.c tests/*.c tests/*.tpl + Added <stdlib.h> where needed. + +2003-09-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h + Added ARRAY_LEN, SF_MAX and SF_MIN macros. + +2003-08-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/index.html + Remove statements about alternative licensing arrangements. + +2003-08-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * MacOS MacOS9 Makefile.am configure.ac + Change directory name from MacOS to MacOS9 + + * MacOS9/MacOS9-readme.txt + Change name to make it really obvious, add text to top of file to make it + still more obvious again. + +2003-08-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/test_log_printf.c + Add tests for %u conversions. + + * src/common.c + Fix psf_log_printf() %u conversions. + +2003-08-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c + Fixed a bug where opening a file with a non-trival header in SFM_RDWR mode + would over-write part of the header. Thanks to Axel Röbel for pointing + this out. Axel also provided a patch to fix this but I came up with a + neater and more general solution. + Return error when openning an AIFF file with data after the SSND chunk + (Thanks Axel Röbel). + + * tests/aiff_rw_test.c + Improvements to test program which will later allow it to be generalised to + test WAV, SVX and others as required. + +2003-08-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/pipe_test.c + Add useek_pipe_rw_test() submitted by Russell Francis. + + * src/sndfile.c + In sf_open_fd(), check if input file descriptor is a pipe. + + * src/sndfile.[ch] + Fix typo in variable name do_not_close_descriptor. + +2003-08-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/test_log_printf.c + Improve the tests for %d and %s conversions. + + * src/common.c + Fixed a few problems in psf_log_printf() found using new tests. + +2003-08-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Add -Wwrite-strings warning to CFLAGS if the compiler is GCC. Thanks to + Peter Miller (Aegis author) for suggesting this and supplying a patch. + + * src/*.c examples/*.c tests/*.c + Fix all compiler warnings arising from the above. + +2003-08-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/aiff_rw_test.c tests/Makefile.am + New test program to check for errors re-writing the headers of AIFC files + opened in mode SFM_RDWR. + +2003-07-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-play.c + Applied a patch from Tero Pelander to allow this program to run on systems + using devfs which used /dev/sound/dsp instead of /dev/dsp. + +2003-07-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/new_file_type.HOWTO + Updated document. Still incomplete. + +2003-06-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Fix VALIDATE_SNDFILE_AND_ASSIGN_PSF which was returning an error rather + than saving it and returning zero. + +2003-06-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/file_io.c + Two fixes for Mac OS9. + Fix all casts from sf_count_t to ssize_t (not size_t). + +2003-06-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c + Fix for reading files with RIFF length of 8 and data length of 0. + +2003-06-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/*.c tests/*.c tests/*.tpl + Added comments to mark code for removal when make Lite version of + libsndfile. + +2003-06-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-convert.c + Add extra error checking for unrecognised arguments. + +2003-06-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/ima_adpcm.c + Started adding code to write IMA ADPCM encoded AIFF files. + + * src/test_log_printf.c src/Makefile.am + New file to test psf_log_printf() function and add hooks into build system. + + * src/common.c + Move psf_log_printf() function to top of the file and only compile the rest + of the file if if PSF_LOG_PRINTF_ONLY is not defined. + +2003-06-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * Win32/config.h Win32/sndfile.h + Updated with new config variables. + + * Win32/unistd.h src/file_io.c + Added implementation of S_ISFIFO macro which Win32 seems to lack and is + used in src/file_io.c. + + * tests/utils.tpl + Added #include <unitstd.h> to pull in Win32/unistd.h so it compiles for + Win32. + + * src/Makefile.msvc + Added src\test_file_io.exe build target and run this as the very first + test. + + * tests/win32_test.c + Add support for testing Cygwin32. + + * configure.ac + Detect POSIX fsync() and fdatasync() functions. + + * src/file_io.c + If compiling for Cygwin, call fsync() before calling fstat() to retrieve + file length. + + * tests/pcm_test.tpl + Add a test for lrintf() function. This was required to detect a really + broken lrint() and lrintf() on Cygwin. + + * tests/misc_test.c + Don't run permission test when compiling under Cygwin. + + * src/float_cast.h + Fix fallback macro for lrint() and lrintf() to cast to long instead of int + to match official function prototypes. + +2003-06-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-convert.c + Modifications to improve accuracy of conversions; use double data for + floating point and int for everything else. + + * src/ima_apdcm.c + Completed work on decoding IMA ADPCM encoded AIFF files. Still need to + get encoding working. + +2003-05-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c src/ima_adpcm.c + Start working on getting IMA ADPCM encoded AIFF files working. + +2003-05-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Fixed the touch command for when the autogen program is not found (Matt + Flax). + + * src/ulaw.c src/alaw.c + Made these pipe-able. + +2003-05-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/paf.c src/ircam.c + Fixed writing to pipe. + + * src/wav.c src/aiff.c src/nist.c src/mat*.c src/svx.c src/w64.c + Return SFE_NO_PIPE_WRITE if an attempt is made to write to a pipe. + +2003-05-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-info.c + Modified to detect unknown file lengths. + + * src/mat4.c + Fix reading from a pipe. + +2003-05-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/pipe_test.c + Add more file types to tests. + + * src/mat4.c + Removed explicit setting of psf->sf.seekable to SF_TRUE. + + * tests/utils.tpl + Add macro for generating and check data in the stdio and pipe tests. + + * tests/stdout_test.c tests/stdin_test.c + Use the above macro to generate known data on output and check data on + input. + + * src/voc.c src/htk.c common.h sndfile.c + Disallow reading/writing VOC and HTK files from/to pipes be returning new + error values. + + * src/w64.c + Fixes to allow reading from a pipe. + +2003-05-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac src/sndfile.h.in + When the configure script determines the sizeof (sf_count_t), also set the + value of SF_COUNT_MAX in sndfile.h. + + * configure.ac + Remove -pedantic flag from default GCC compiler flags. + + * tests/pipe_test.c + Add a pipe_read_test() before doing pipe_write_test(). + + * tests/scale_clip_test.c + Add test to make sure non-normalized values also clip in the right way. + +2003-05-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Add test to detect processor clipping capabilities. + + * tests/stdin_test.c tests/stdout_test.c + Fix a pair of compiler warnings. + + * src/common.h + Add new pipeoffset field to SF_PRIVATE. This will contain the current file + offset when operating on a pipe. + + * src/common.c + Removed direct calls to psf_fread()/psf_fseek()/psf_fgets() etc from + psf_binheader_readf and redirect them to new buffered versions + header_read(), header_seek() and header_gets(). + Add "G" format specifier to emulate fgets() functionality with buffering. + This will allow reading some file types from pipes. + + * src/file_io.c + When the file descriptor is a pipe, manintain psf->pipeoffset. + + * src/pvf.c + Change use of psf_fgets() to psf_binheader_readf() as required but changes to header re + + * src/au.c + Fix reading from a pipe. + +2003-05-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/pcm.c + Add clipping versions of the f2XXX_array() functions to allow option of + clipping data that would otherwise overflow. + + * tests/scale_clip_test.tpl tests/scale_clip_test.def + New files test that clipping option does actually work. + +2003-05-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/index.html + Fixed a typo ("OS(" instead of "OS9"). + +2003-05-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/open_fail_test.c + Include <string.h> to prevent warning message of missing declaration of + memset(). + +2003-05-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h + Add new "add_clipping" field to SF_PRIVATE. + + * src/sndfile.h.in src/sndfile.c + Add command SFC_SET_CLIPPING which sets/resets add_clipping field. + +2003-05-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/api.html + Add docs for sf_set_string() and sf_get_string(). + + * src/common.h src/sndfile.c + Add new SFE_STR_BAD_STRING error. + + * tests/stdin_test.c tests/stdout_test.c + Removed all non-error print statements. + + * tests/stdio_test.c tests/pipe_test.c tests/Makefile.am + Add print statements removed from two files above. + +2003-05-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * libsndfile.spec.in + Fixed a coulpe of minor errors discovered by someone calling themselves + Agent Smith. + + * src/common.c src/common.h src/file_io.h + Added is_pipe field to SF_PRIVATE and declaration of psf_is_pipe() + function. (Axel Röbel) + + * src/sndfile.c + Fixed determination of whether the file is a pipe. (Axel Röbel) + + * src/paf.c + Force paf24 to start with undefined mode. (Axel Röbel) + + * tests/pipe_test.c + Mods to make this test work and actually do the test on RAW files. (Axel + Röbel). + +2003-05-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Fixed a potential bug where psf->sf.seekable was being set to FALSE when + operating on stdin or stdout but then the default initialiser was reseting + it to TRUE. Thanks to Axel Röbel. + + * src/aiff.c + Fixed a bug in the header parser where it was not handling an odd length + COMM chunk correctly. Thanks to Axel Röbel. + + * src/test_file_io.c + Add more tests. + + * tests/win32_test.c + New file for showing the bugs in the Win32 implementation of the POSIX API. + It also runs on Linux for sanity checking. + + * tests/Makefile.am Win32/Makefile.msvc + Hook the new test program into the build system. + +2003-05-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/test_file_io.c + New test program to test operation of functions defined in file_io.c. This + should make supporting win32 significantly easier. + + * src/Makefile.am + Hook new test program into the build system. + + * src/file_io.c + Add compile/run time check that sizeof statbuf.st_size and sf_count_t are + the same. + + * src/common.h src/sndfile.c + Added new error code and error message for new check. + + * tests/benchmark.tpl + Fix to use frames instead of samples in SF_INFO. + +2003-05-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/file_io.c + More stuffing about working around PLAIN OLD-FASHIONED **BUGS** in Win32. + + * examples/sndfile-info.c + Applied patch from Conrad Parker to add "--help" and "-h" options as + well as an improved usage message. + +2003-05-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/au.c + Added embedded file support. + + * tests/multi_file_test.c + Added tests for embedded AU files. + Added verbose testing mode. + + * src/common.h src/sndfile.c + Added an embedded AU specific error code and message. + + * src/wav.c + Added patch from Conrad Parker which filled in a little more information + about ACIDized WAV files. + +2003-04-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/file_io.c + Fixed Win32 version of psf_fseek() which was calling psf_get_filelen() + which was in turn calling psf_fseek() which in the end blew the stack. + Now of course this would have been easy to find on Linux, but this blow + up was happening in kernel32.dll and the fscking MSVC++ debugger couldn't + figure out what call caused this (it couldn't even tell me the stack had + overflowed) and was absolutley useless for this debugging exercise. + On top of that, the reason I got into this mess was that windoze doesn't + have a working fstat() function which can return file lengths > 2 Gig. It + HAS a fscking _fstati64() but the file length value is only updated AFTER + the bloody file is closed. That makes it completely useless. + How the hell do people stand working on this crap excuse of an OS? + +2003-04-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * Win32/unistd.h src/file_io.c + Moved definitions of S_IGRP etc from file_io.c to unistd.h so that these + can be used in the test programs. + + * Win32/libsndfile.def + Added sf_open_fd. + + * Win32/sndfile.h + Updated to match src/sndfile.h.in. + + * Win32/Makefile.msvc + Added dither.c and htk.c to libsndfile.dll target. + +2003-04-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/file_io.c + First attempt at getting the Win32 versions of the these functions working. + They still need to be tested. + +2003-04-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/strings.c + Found and fixed a bug which was causing psf_store_string() to fail on + Motorola 68k processors. Many thanks fo Joshua Haberman (Debian maintainer + of libsndfile) for compiling and running debug code to help me debug the + problem. + +2003-04-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c src/file_io.c src/wav.c src/aiff.c + Much hacking to get reading and writing of embedded files working (ie sound + files at a non-zero files offset). + + * doc/embedded_files.html + First pass atempt at documenting reading/writing embedded files. + +2003-04-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/FAQ.html + Updated answer to "Why doesn't libsndfile do interleaving/de-interleaving?" + +2003-04-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c src/aiff.c + Fix retrieving and storing of string data from files. Need to be careful + about using psf->buffer for strings. + +2003-04-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/file_io.c + Fix psf_fseek() for seeks withing embedded files. + +2003-04-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.h.in + Changed the definition of SNDFILE slightly to produce warnings when it isn't + used correctly. This should have zero affect in code which uses the SNDFILE + type correctly. + + * src/sndfile.c + Fixed a few compiler warnings cause by the changes to the SNDFILE type. + +2003-04-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/FAQ.html + Added question and answer to the question "How about adding the ability + to write/read sound files to/from memory buffers?". + +2003-04-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/write_read_test.tpl + Removed un-needed enums declaring TRUE and FALSE and replaced usage of + these with SF_TRUE and SF_FALSE. + + * tests/multi_file_test.c + New test program to test sf_open_fd() on files containing data other than + a single sound file. + +2003-04-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/file_io.c + When creating files, set the readable by others flag. This still allows + further restrictions to be enforced by use of the user's umask. Fix + suggested by Eric Lyon. + +2003-04-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.h.in src/sndfile.c + Changed sf_open_fd(). Dropped offset parameter and added a close_desc + parameter. If close desc is TRUE, the file descritpor passed into the + library will be closed when sf_close() is called. + + * tests/utils.tpl + Modified call to sf_open_fd() to set close_desc parameter to SF_TRUE. + +2003-04-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/write_read_test.tpl + Add a string (using sf_set_string() function) before and after data section + of all files. This will make sure that if string data can be added, it + doesn't overwrite real audio data. + +2003-04-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Started work on supporting a non-zero offset parameter for sf_open_fd (). + + * src/<file header parsers>.c + Removed many uses of psf_fseek (SEEK_END) which to allow for future use of + sf_open_fd() with non-zero offset. + Associated refactoring. + + * src/aiff.c + Implemented functionality required to get sf_get_string() and + sf_set_string() working for AIFF files. + +2003-04-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/utils.tpl + Modified test_open_file_or_die() to alternately use sf_open() and + sf_open_fd(). + + * src/svx.c + Fixed a bug which occurred when openning an existing file for read/write + using sf_open_fd(). In this case, the existing NAME chunk needs to be + read into psf->filename. + Fixed printing of sf_count_t types to logbuffer. + +2003-03-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.h.in + Added prototype for new function sf_open_fd(). + + * src/sndfile.c + Moved most of the code in sf_open() to a new function psf_open_file(). + Created new function sf_open_fd() which also uses psf_open_file() but + does not currently support the offset parameter. + + * doc/api.html + Document sf_open_fd(). + +2003-03-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Fixed a memory leak reported by Evgeny Karpov. Memory leak only occurred + when an attempt was made to read and the open() call fails. + +2003-03-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/open_fail_test.c + New test program to check for memory leaks when sf_open fails on a valid + file. Currently this must be run manually under valgrid. + + * tests/Makefile.am + Hook new test program into build. + +2003-03-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * Octave/sndfile_save.m Octave/sndfile_play.m + Added a -mat-binary option to the octave save command to force the output + to binary mode even if the user has set ascii data as the default. Found + by Christopher Moore. + +2003-02-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/dither.html + New file which will document the interface which allows the addition of + audio dither when sample word sizes are being reduced. + + * src/dither.c + More work. + +2003-02-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/misc_test.c + In update_header_test(), make HTK files a special case. + + * doc/index.html + Added HTK to the feature matrix. + +2003-02-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/htk.c + New file for reading/writing HMM Tool Kit files. + + * src/sndfile.h.in src/sndfile.c src/command.c src/Makefile.am + Hook in htk.c + + * tests/write_read_test.tpl tests/misc_test.c tests/Makefile.am + Add tests for HTK files. + +2003-02-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c + Fixed a bug where the LIST chunk length was being written incorrectly. + + * tests/string_test.c + Added call to check_log_buffer(). + Minor cleanups. + +2003-02-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav_w64.h + Applied patch from Antoine Mathys to add extra WAV format definitions and + a G72x_ADPCM_WAV_FMT struct definition. + + * src/wav_w64.c + Applied patch from Antoine Mathys which converts wav_w64_format_str() from + one huge inefficient switch statement to a binary search. + + * tests/string_test.c + Dump log buffer if tests fail. + +2003-02-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/string_test.c + David Viens supplied some modifications to this file which showed up a bug + when using sf_set_string() and the sf_writef_float() functions. + + * src/sndfile.c + Fixed the above bug. + +2003-02-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/FAQ.html + Added Q and A on how to detect libsndfile in configure.in (at the suggestion + of Davy Durham). + +2003-02-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.h.in + Add enums and typedefs for dither. + Deprecate SFC_SET_ADD_DITHER_ON_WRITE and SFC_SET_ADD_DITHER_ON_READ, to be + replaced with SFC_SET_DITHER_ON_WRITE and SFC_SET_DITHER_ON_READ which will + allow different dither algorithms to be enabled. + Added SFC_GET_DITHER_INFO_COUNT and SFC_GET_DITHER_INFO. + + * src/sndfile.h.in src/Version_script.in Win32/libsndfile.def. + Added public sf_dither_*() functions. + + * src/sndfile.c + Implement commands above. + + * src/dither.c + More work. Framework and external hooks into dither algorithms complete. + +2003-02-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/version-1.html libsndfile_version_convert.py + Remove redundant files. + + * doc/index.html doc/api.html + Remove links to version-1.html. + + * src/dither.c + New file to allow the addition of audio dither on input and output. + + * src/common.h + Add prototype for dither_init() function. + + * Makefile.am doc/Makefile.am + Changes for added and removed files. + +2003-02-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * Win32/Makefile.msvc + Changes to force example binaries to be placed in the top level directory + instead of the examples/ directory. + Add src/strings.c and src/xi.c to the build. + Add string_test to build and to tests on WAV files. + + * doc/index.html + Added XI to support matrix. + +2003-01-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.h.in + Added prototypes for sf_get_string() and sf_set_string() and SF_STR_* + enum values. + + * src/sndfile.c + Added public interface to sf_get_string() and sf_set_string(). + + * src/wav.c + Added code for setting and getting strings in WAV files. + + * tests/string_test.c + New test program for sf_get_string() and sf_set_string() functionality. + + * tests/Makefile.am + Hook new test program into build and test framework. + +2003-01-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h + Added fields to SF_PRIVATE for string data needed to implement + sf_get_string() and sf_set_string(). + + * src/strings.c + New file for storing and retrieving strings to/from files. + + * src/Makefile.am + Added strings.c to build. + +2003-01-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/xi.c + Read seems to be working so looking at write. + + * src/sndfile.h.in + Added SF_FORMAT_XI, SF_FORMAT_DPCM_8 and SF_FORMAT_DPCM_16 enum values. + + * tests/floating_point_test.c tests/lossy_comp_test.c tests/Makefile.am + Added test for 8 and 16 bit XI format files. + +2003-01-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/index.html + Added a non-lawyer readable summary of the licensing provisions as + suggested by Steve Dekorte. + +2003-01-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c + Fixed a compiler warning found by Alexander Lerch. + +2003-01-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Fixed the multiple linking of libm. + +2003-01-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * Win32/Makefile.mcvs + Added comments on the correct way to set up the MSVCDir environment + variable. + + * doc/win32.html + Add on how to set up the MSVCDir environment variable. + +2003-01-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-play.c examples/sndfile-info.c + When run on Win32 without any command line parameters print a message and + then sleep for 5 seconds. This means the when somebody double clicks on + these programs in explorer the user will actually see the message. + +2003-01-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/misc_test.c + Bypass permission test if running as root because root is allowed to open + a readonly file for write. + +2003-01-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * Win32/Makefile.msvc + Added pvf.c and xi.c source files to project. + + * src/sndfile.h + Updated for PVF files. + +2003-01-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Modified validate_sfinfo() to force samplerate, channels and sections + to be >= 1. + In format_from_extension() replaced calls to does_extension_match() + with strcmp(). + + * src/xi.c + More work. + +2003-01-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/Makefile.am + Added octave.html which had been left out. Found by Jan Weil. + +2003-01-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/pvf.c src/common.h src/sndfile.c + Fixed error handling for PVF files. + + * src/xi.c + New file for handling Fasttracker 2 Extended Instrument files. Not working + yet and included when configured with --enable-experimental. + + * src/sndfile.c src/common.h + Hooked in new file xi.c. + +2002-12-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/rx2.c + Added a patch from Marek Peteraj which sheds a little more light on the + slices within an RX2 file. Still need to find out data encoding. + +2002-12-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c + Started work on decoding 'acid' and 'strc' chunks. + +2002-12-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/peak_check_test.c + Minor cleanup. + +2002-12-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/write_read_test.tpl + Added check to make sure no error was generated when an attempt was made to + read past the end of the file. + +2002-12-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/lists.html + Added "mailto" links for all three lists. + + * src/pvf.c + New file for Portable Voice Format files. + + * src/sndfile.h.in src/sndfile.c src/common.h src/command.c src/Makefile.am + Added hooks for SF_FORMAT_PVF format files. + + * tests/write_read_test.tpl tests/std*.c + Add tests for SF_FORMAT_PVF. + + * doc/index.html + Add PVF to the compatibility matrix. + + * src/pcm.c src/alaw.c src/ulaw.c src/float32.c src/double64.c + Previously, attempts to read beyond the end of a file would set psf->error + to SFE_SHORT_ERROR. This behaviour diverged from the behaviour of the POSIX + read() call but has now been fixed. + Attempts to read beyond the end of the file will return a short read count + but will not longer set any error. + +2002-12-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Add more sanity checking when opening a RAW file for read. When format is + not RAW, zero out all members of the SF_INFO struct. + + * tests/raw_test.c + Add bad_raw_test() to check for above problem. + + * tests/stdin_test.c examples/sndfile-info.c + Set the format field of the SF_INFO struct to zero before calling + sf_open(). + + * doc/api.html + Add information about the need to set the format field of the SF_INFO struct + to zero when opening non-RAW files for read. + + * configure.ac + Removed use of conversion script on Solaris. Not all Solaris versions + support it. + + * doc/lists.html + New file containg details of the mailing lists. + + * doc/index.html + Add a link to the above new file. + +2002-12-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/dft_cmp.c + Fixed a SIGFPE on Alpha caused by a log10 (0.0). Thanks to Joshua Haberman + for providing the gdb traceback. + +2002-11-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c + Added more capabilities to 'smpl' chunk parser. + + * src/sndfile.c + Fixed some (not all) possible problems found with Flawfinder. + +2002-11-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Fixed a bug in sf_seek(). This bug could only occur when an attempt was + made to read beyond the end and then sf_seek() was called with a whence + parameter of SEEK_CUR. + + * src/file_io.c + Win32's _fstati64() does not work, it returns BS. Re-implemented + psf_get_filelen() in terms of psf_fseek(). + + * tests/write_read_test.tpl + Add a test to detect above bug. + + * src/float_cast.h + Modification to prevent compiler warnings on Mac OS X. + + * src/file_io.c + Fixes for windows (what a f**ked OS). + +2002-11-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.ac + Disable use of native lrint()/lrintf() on Mac OSX. These functions exist on + Mac OSX 10.2 but not on 10.1. Forcing the use of the versions in + src/float_cast.h means that a library compiled on 10.2 will still work on + 10.1. + +2002-11-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.in configure.ac + Renamed configure.in to configure.ac as expected by later versions of + autoconf. + Slight hacking of configure.ac to work with version 2.54 of autoconf. + Changed to using -dumpversion instead of --version for determining GCC + version numer as suggested by Anand Kumria. + + * src/G72x/Makefile.am + Slight hacking required for operation with automake 1.6.3. + +2002-11-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.c + In psf_binheader_readf() changed type parameter type "b" type from size_t + to int to prevent errors on IA64 CPU where sizeof (size_t) != sizeof (int). + Thanks to Enrique Robledo Arnuncio for debugging this. + +2002-11-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * test/command_test.tpl + Changed test value so test would pass on Solaris. + + * src/Version_script.in + Modified version numbering so that later versions of 1.0.X can replace + earlier versions without recompilation. + + * src/vox_adpcm.c + Fixed bug causing short reads. + +2002-11-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * test/floating_point_test.c + Code cleanup using functions from util.c. + Add test for IEEE replacement floats and doubles. + +2002-11-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c + Fixed a possible divide by zero error when read the 'smpl' chunk. Thanks to + Serg Repalov for the example file. + + * tests/pcm_test.tpl + Used sf_command (SFC_TEST_IEEE_FLOAT_REPLACE) to test IEEE replacement code. + Clean up pcm_double_test(). + + * src/float32.c src/double64.c + Force use of IEEE replacement code using psf->ieee_replace is TRUE, + Print message to log_buffer as well. + Rename all broken_read_* and broken_write* functions to replace_read_* and + replace_write_*. + + * tests/util.tpl + Added string_in_log_buffer(). + + * tests/pcm_test.tpl + Use string_in_log_buffer() to ensure that IEEE replacement code has been + used. + + * configure.in + Removed --enable-force-broken-float option. IEEE replacement code is now + always tested. + +2002-10-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/double64.c + Implement code for read/writing IEEE doubles on platforms where the native + double format is not IEEE. + + * src/float32.c src/common.h + Remove float32_read() and float32_write(). Replace with float32_le_read(), + float32_be_read(), float32_le_write() and float32_be_write() to match stuff + in src/double64.c. + + * src/common.c + Fix all usage of float32_write(). + + * src/sndfile.h.in + Added SFC_TEST_IEEE_FLOAT_REPLACE command (testing only). + + * src/common.h + Added SF_PRIVATE field ieee_replace. + + * src/sndfile.c + In sf_command() set/reset psf->ieee_replace. + +2002-10-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/pcm_test.tpl + Fixed a problem when testing with --enable-force-broken-float. The test was + generating a value of negative zero and the broken float code is not able + to write negative zero. Removing the negative zero fixed the test. + +2002-10-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/file_io.c + Added fix for Cygwin (suggested by Maros Michalik). + +2002-10-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/file_io.c + Improved error detection and handling. + + * src/file_io.c src/common.h + Removed functions psf_ferror() and psf_clearerr() which were redundant + after above improvements. + + * src/aiff.c src/svx.c src/w64.c src/wav.c + Removed all use of psf_ferror() and psf_clearerr(). + + * src/sndfile.c + Removed #include of <stdio.h>, <unistd.h>, <fcntl.h> and <math.h> which + are no longer needed. + + * tests/misc_test.c + Added test to make sure the correct error message is returned with an + existing read-only file is openned for write. + +2002-10-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/index.html doc/api.html + Updated for OKI Dialogic ADPCM files. + + * src/command.c + Added VOX ADPCM to sub_fomats. + +2002-10-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/vox_adpcm.c src/Makefile.am + New file for handling OKI Dialogic ADPCM files. + + * src/sndfile.h + Add new subtype SF_FORMAT_VOX_ADPCM. + + * src/sndfile.c + Renamed function is_au_snd_file () to format_from_extenstion () and expanded + its functionality to detect headerless VOX files. + + * src/raw.c + Added hooks for SF_FORMAT_VOX_ADPCM. + + * examples/sndfile-info.c + Print out file duration (suggested by Conrad Parker). + + * libsndfile.spec.in + Force installation of sndfile.pc file (found by John Thompson). + + * tests/Makefile.am tests/lossy_comp_test.c tests/floating_point_test.c + Add tests for SF_FORMAT_VOX_ADPCM. + +2002-10-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/misc_test.c + Add test which attempts to write to /dev/full (on Linux anyway) to check + for correct handling of writing to a full filesystem. + + * src/sndfile.c + Return correct error message if the header cannot be written because the + filesystem is full. + + * tests/util.tpl + Corrected printing of file mode in error reporting. + + * src/mat5.c + Fixed a bug where a MAT5 file written by libsndfile could not be opened by + Octave 2.1.36. + +2002-10-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h src/file_io.c + All low level file I/O have been modified to be better able to report + system errors resulting from calling system level open/read/write etc. + + * src/*.c + Updated for compatibility with above changes. + + * examples/cooledit-fixer.c + New example program which fixes badly broken file created by Syntrillium's + Cooledit which are marked as containing PCM samples but actually contain + floating point data. + + * examples/Makefile.am + Hooked cooledit-fixer into the build system. + +2002-10-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/command.html + Document SFC_GET_FORMAT_INFO. + +2002-10-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/wav32_aiff24.c examples/sndfile2oct.c examples/sfhexdump.c + examples/sfdump.c + Removed these files because they weren't interesting. + + * examples/sfconvert.c examples/sndfile-convert.c + Renamed the first to the latter. + + * examples/Makefile.am + Added sndfile-convert to the bin_PROGRAMS, so it is installed when the lib + is installed. + Removed old programs wav32_aiff24 and sndfile2oct. + + * man/sndfile-convert.1 + New man page. + + * examples/sndfile-convert.c + Added some gloss now that sndfile-convert.c is an installed program. + + * src/sndfile.h.in src/sndfile.c src/common.h src/command.h + Added command SFC_GET_FORMAT_INFO. + + * tests/command_test.c + Added tests form SFC_GET_FORMAT_INFO. + +2002-10-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + In sf_format_check() return error if samplerate < 0. + +2002-10-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c + Fixed bug in handling of COMM chunks with a 4 byte encoding byte but no + encoding string. + +2002-10-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Fixed repeated word in an error message. + +2002-10-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/index.html + Improved advertising in Features section. + +2002-10-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c + Added decoding of 'labl' chunks within 'LIST' chunks. + + * src/common.h + Added (experimental only) SF_FORMAT_OGG and SF_FORMAT_VORBIS and definition + of ogg_open(). This is nowhere near working yet. + + * src/sndfile.c + Added detection of 'OggS' file marker and added call to ogg_open() to + switch statement. + + * src/ogg.c + New file. Very early start of Ogg Vorbis support. + + * src/wav.c + Added handling of brain-damaged and broken Cooledit "32 bit 24.0 float + type 1" files. These files are marked as being 24 bit WAVE_FORMAT_PCM with + a block alignment of 4 times the numbers of channels but are in fact 32 bit + floating point. + +2002-10-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.in + Modified option --enable-experimental to set ENABLE_EXPERIMENTAL_CODE in + config.h to either 0 or 1. + + * src/sndfile.c + Modify sf_command (SFC_GET_LIB_VERSION) to append "-exp" to the version + string if experimental code has been enabled. + +2002-10-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/Makefile.am + Added -lm to libsndfile_la_LIBADD. This means that -lm is not longer needed + in the link line when linking something to libsndfile. + + * tests/Makefile.am examples/Makefile.am + Removed -lm from all link lines. + + * sndfile.pc.in + Removed -lm from Libs line. + +2002-09-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/file_io.c + Removed all perror() calls. + + * src/nist.c + Removed calls to exit() function. + Added check to detect NIST files dammaged from Unix CR -> Win32 CRLF + conversion process. + +2002-09-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.h.in src/sndfile.c + New function sf_strerror() which will eventually replace functions + sf_perror() and sf_error_str(). + Function sf_error_number() has also been changed, but this was documented + as being for testing only. + + * doc/api.html + Documented above changes. + + * tests/*.c examples/*.c + Changed to new error functions. + +2002-09-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.in + Detect GCC version, and print a warning message about writeable strings + it GCC major version number is less than 3. + +2002-09-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.h.in doc/api.html + Documentation fixes. + +2002-09-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/Version_script.in src/Makefile.am configure.in + Use the version script to prevent the exporting of all non public symbols. + This currently only works with Linux. Will test on Solaris as well. + + * src/float_cast.h + Added #ifndef to prevent the #warning directives killing the SGI MIPSpro + compiler. + + * src/au_g72x.c src/double64.c src/float32.c src/gsm610.c src/ima_adpcm.c + src/ms_adpcm.c + Fix benign compiler warnings arising from previously added compiler + flags. + +2002-09-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Fixed a bug in sf_error_str() where errnum was used as the index instead + of k. Found by Tim Hockin. + + * examples/sndfile-play.c + Fixed a compiler warning resulting from a variable shadowing a previously + defined local. + +2002-09-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.h.in src/sndfile.c + Added command SFC_SET_RAW_START_OFFSET. + + * doc/command.html + Document SFC_SET_RAW_START_OFFSET. + + * tests/raw_test.c tests/Makefile.am + Add new file for for testing SF_FORMAT_RAW specific functionality. + + * tests/dwvw_test.c + Updates. + +2002-09-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c + Modified reading of 'smpl' chunk to take account of the sampler data field. + + * tests/utils.tpl tests/utils.h + Added function print_test_name(). + + * tests/misc_test.c tests/write_read_test.tpl tests/lossy_comp_test.c + tests/pcm_test.tpl tests/command_test.tpl tests/floating_point_test.c + Convert to use function print_test_name(). + +2002-09-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/octave.html + Added a link to some other Octave scripts for reading and writing sound + files. + + * src/paf.c + Change type of dummy data field to int. This should fix a benign compiler + warning on some CPUs. + Removed superfluous casts resulting from the above change. + + * src/rx2.c + More hacking. + +2002-09-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/mat5.c src/common.c + Changed usage of snprintf() to LSF_SNPRINTF(). + + * Win32/Makefile.msvc + Updated to include new files and add new tests. + + * Win32/config.h Win32/sndfile.h + Updated. + + * doc/api.html + Added note about the possibility of "missing" features actually being + implemented as an sf_command(). + +2002-09-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/misc_test.c + Added previously missing update_header_test and zero_data_tests for PAF, + MAT4 and MAT5 formats. + + * src/paf.c src/mat4.c src/mat5.c + Fixed bugs uncovered by new tests above. + + * src/mat5.c + Generalised parsing of name fields of MAT5 files. + + * src/mat5.c src/sndfile.c + Added support for unsigned 8 bit PCM MAT5 files. + + * tests/write_read_test.tpl + Added test for unsigned 8 bit PCM MAT5 files. + + * doc/index.html + Added unsigned 8 bit PCM MAT5 to capabilities matrix. + +2002-09-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * test/update_header_test.c tests/misc_test.c + Renamed update_header_test.c to misc_test.c. + Added zero_data_test() to check for case where file is opened for write and + closed immediately. The resulting file can be left in a state where + libsndfile cannot open it. Problem reported by Werner Schweer, the author + of Muse. + + * src/aiff.c + Removed superfluous cast. + + * src/wav.c src/svx.c + Fixed case of file generated with no data. + Removed superfluous cast. + + * src/sndfile.c + Fixed error on IA64 platform caused by incorrect termination of + SndfileErrors struct array. This problem was found in the Debian buildd + logs (http://buildd.debian.org/). + + * configure.in + Added Octave directory. + + * Octave/Makefile.ma + New Makfile.am for Octave directory. + + * Octave/sndfile_load.m Octave/sndfile_save.m Octave/sndfile_play.m + New files for working with Octave. + + * doc/octave.html + Document explaining the use of the above three Octave scripts. + +2002-09-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Fixed bug in RDWR mode. + +2002-09-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.c + Fixed psf_get_date_str() for systems which don't have gmtime_r() or + gmtime(). + + * src/file_io.c + Added #include <io.h> for Win32. Reported by Koen Tanghe. + +2002-09-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.c + Added 'S' format specifier for psf_binheader_writef() which writes a C + string, including single null terminator to the header. + Added 'j' format specifier to allow jumping forwards or backwards in the + header. + Added function psf_get_date_str(). + + * src/mat5.c + Complete read and write support. + + * doc/index.html + Added entries for MAT4 and MAT5 in capabilities matrix. + +2002-09-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/mat4.c + Completed read and write support. + + * src/common.h src/sndfile.c + Added MAT4 and MAT5 specific error messages. + + * tests/write_read_test.tpl tests/Makefile.am + Added tests for MAT4 and MAT5 files. + + * tests/stdio_test.c tests/stdout_test.c tests/stdin_test.c + Added tests for MAT4 and MAT5 files. + +2002-09-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/command.c + Added elements for SF_FORMAT_MAT4 and SF_FORMAT_MAT5 to major_formats + array. + + * examples/sfconvert.c + Added mat4 and mat5 output targets. + +2002-09-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Added check to prevent errors openning read only formats for read/write. + + * src/interleave.c + New file for interleaving non-interleaved data. Non-interleaved data is + only supported on read. + + * src/Makefile.am + Added src/interleave.c to build. + +2002-09-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/double64.c src/common.h + Added double64_be_read(), double64_le_read(), double64_be_write() and + double64_le_write() which replace double64_read() and double64_write(). + + * src/common.c + Cleanup of psf_binheader_readf() and add ability to read big and little + endian doubles (required by mat4.c and mat5.c). + Add ability for psf_binheader_writef() to write doubles to sound file + headers. + +2002-09-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/mat5.c + New file for reading Matlab (tm) version 5 data files. This is also the + native binary file format for version 2.1.X of GNU Octave which will be + used for testing. + Not complete yet. + + * src/mat4.c + New file for reading Matlab (tm) version 4.2 data files. This is also the + native binary file format for version 2.0.X of GNU Octave which will be + used for testing. + Not complete yet. + + * src/sndfile.h.in src/sndfile.c src/common.h src/command.c src/Makefile.am + Mods to add Matlab files. + + * src/common.[ch] + Added readf_endian field to SF_PRIVATE struct allowing endianness to + remembered across calls to sf_binheader_readf(). + Fixed bug in width_specifier behaviour for printing hex values. + +2002-08-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/file_io.c + Check return value of close() call in psf_fclose(). + +2002-08-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/ms_adpcm.c + Commented out some code where 0x10000 was being subtracted from a short + and the result assigned to a short again. Andrew Zaja found this. + +2002-08-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/command.html + Fixed typo found by Tommi Ilmonen. + + * src/ima_adpcm.c + Changed type of diff from short to int to prevent errors which can occur + during very rare circumstances. Thanks to FUWAFUWA. + +2002-08-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/floating_point_test.c + Disable testing on machines without lrintf(). + + * Win32/Makefile.msvc + Added dwd.c and wve.c to build. + + * configure.in + Bumped version to 1.0.0. + +2002-08-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/file_io.c + Add a #include for Mac OS 9. Thanks to Stephane Letz. + + * src/wav.c + Changed an snprintf to LSF_SNPRINTF. + + * doc/Makefile.am + Added version-1.html. + +2002-08-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.in + Bumped version to 1.0.rc6. + + * src/*.c + Modified scaling of normalised floats and doubles to integers. Until now + this has been done by multiplying by 0x8000 for short output, 0x80000000 + for 32 bit ints and so on. Unfortunately this can cause an overflow and + wrap around in the target value. All thes values have therefore been + reduced to 0x7FFF, 0x7FFFFFFF and so on. The conversion from ints to + normalised floats and doubles remains unchanged. This does mean that for + repeated conversions normalised float -> pcm16 -> normalised float would + result in a decrease in amplitude of 0x7FFF/0x8000 on every round trip. + This is undesirable but less undesireable than the wrap around I am trying + to avoid. + + * tests/floating_point_test.c + Removed file hash checking because new float scaling procedure introduced + above prevented the ability to crate a has on both x86 and PowerPC systems. + +2002-08-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/txw.c + Completed reading of TXW files. Seek doesn't work yet. + + * src/file_io.c + Added a MacOS 9 replacement for ftruncate(). + + * MacOS/sndfile.h + Added MacOS 9 header file. This should be copied into src/ to compile + libsndfile for MacOS9. + +2002-08-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Fixed commands SF_SET_NORM_DOUBLE and SFC_SET_NORM_FLOAT to return their + values after being set. Reported by Jussi Laako. + + * configure.in + If autogen is not found, touch all .c and .h files in tests/. + + * src/common.c + Added format width specifier to psf_log_printf() for %u, %d, %D and %X. + + * src/dwd.c + Completed implementation of read only access to these files. + + * src/common.h src/*.c src/pcm.c + Removed redundant field chars from SF_PRIVATE struct and modified + pcm_init() to do without it. + +2002-08-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wve.c + New file implementing read of Psion Alaw files. This will be a read only + format. Implementation complete. + + * src/dwd/c + Started implementation of DiamondWare Digitized files. Also read only, not + complete. + + * src/wav.c + Add parsing of 'smpl' chunk. + + * src/paf.c + Fixed reading on un-normalized doubles and floats from 24 bit PAF files. + This brings it into line with the reading of 8 bit files into + un-normalized doubles which returns values in the range [-128, 127]. + + * src/common.c + Modified psf_log_printf() to accept the %% conversion specifier to allow + printing of a single '%'. + + * src/sds.c + Read only of 16 bit samples is working. Need to build a test harness for + this and other read only formats. + +2002-08-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.in + Added --enable-experimental configure option. + Removed pkg-config message at the end of the configure process. + + * src/sds.c src/txw.c src/rx2.c src/sd2.c + Moved all the code in these files inside #if ENABLE_EXPERIMENTAL_CODE + blocks and added new *_open() function for the case where experimental is + not enabled. These new functions just return SFE_UNIMPLMENTED. + + * Win32/sndfile.h src/sndfile.h.in src/common.h + Removed un-necessary #pragma pack commands. + + * src/file_io.c + Implemented psf_ftruncate() and much other hacking for Win32. + + * Win32/Makefile.msvc + Updated. + + * doc/win32.html + Updated to include the copying of the sndfile.h file from the Win32/ + directory to the src/ directory. + + * Make.bat + Batch file to make compiling on Wi32 a little easier. Implements "make" and + "make check". + +2002-08-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/file_io.c + Add place holder for ftruncate() on Win32 which doesn't have ftruncate(). + This will need to be fixed later. + + * src/sndfile.h.in + New file (copy of sndfile.h) with sets up @TYPEOF_SF_COUNT_T@ which will be + replaced by the correct type during configure. + + * configure.in + Modified to find a good type for TYPEOF_SF_COUNT_T. + + * src/aiff.c + Fixed a bug when reading malformed headers. + + * src/common.c + Set read values to zero before performing read. + +2002-08-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/command.html + Fixed some HTML tags which were not allowing jumps to links within the + page. + + * src/sds.c + Massive hacking on this. + + * src/wav.c + Added recognition of 'clm ' tag. + +2002-08-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/index.html + Added beginning of a capabilities list beyond simple file formats which + can be read/written. + + * src/aiff.c + Added parsing of INST and MARK chunks of AIFF files. At the moment this + data is simply recorded in the log buffer. Later it will be possible to + read this data from an application using sf_command(). + + * src/wav.c + Added parsing of 'cue ' chunk which contains loop information in WAV files. + + * exampes/sndfile-info.c + Changed reporting of Samples to Frames. + + * src/wav.c src/w64.c src/aiff.c src/wav_w64.h + Moved from a samples to a frames nomenclature to avoid confusion. + + * doc/FAQ.html + What's the best format for storing temporary files? + + * src/sds.c + New file for reading/writing Midi Sample Dump Standard files. + + * src/Makefile.am src/sndfile.c src/common.[ch] + Added hooks for sds.c. + + * examples/sndfile-info.c + Changed from using sf_perror() to using sf_error_str(). + +2002-08-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/api.html + Added explanation of mode parameter for sf_open(). + Added explanation of usage of SFM_* values in sf_seek(). + + * src/sndfile.[ch] src/command.c src/file_io.c src/common.h + Implemented SFC_FILE_TRUNCATE to allow a file to be truncated. File + truncation was suggested by James McCartney. + + * src/command.html + Documented SFC_FILE_TRUNCATE. + + * tests/command_test.c + Add tests for SFC_FILE_TRUNCATE. + + * src/sndfile.c + Added a thrid parameter to the VALIDATE_SNDFILE_AND_ASSIGN_PSF macro to + make resetting the error number optional. All uses of the macro other than + in error reporting functions were changed to reset the error number. + + * src/pcm.c + Fixed a bug were sf_read_* was logging an SFE_SHORT_READ even when no error + occurred. + + * tests/write_read_test.tpl + Added tests of internal error state. + +2002-08-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/GSM610/private.h src/GSM610/*.c src/GSM610/Makefile.am + Renamed private.h to gsm610_priv.h to prevent clash with other headers + named private.h in other directories. (Probably only a problem on MacOS 9). + + * src/G72x/private.h src/G72x/*.c src/G72x/Makefile.am + Renamed private.h to g72x_priv.h to prevent clash with other headers + named private.h in other directories. (Probably only a problem on MacOS 9). + + * MacOS/config.h + Changed values of HAVE_LRINT and HAVE_LRINTF to force use of code in + float_cash.h. + + * src/sndfile.h + Changes the name of samples field of the SF_INFO to frames. The old name + had caused too much confusion and it simply had to be changed. There will + be at least one more pre-release. + +2002-08-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/index.html + Updated formats matrix to include RAW (header-less) GSM 6.10. + Fix specificaltion of table and spelling mistakes. + + * src/sndfile.c src/command.c + Fixed bug in SFC_CALC_MAX_SIGNAL family and psf_calc_signal_max (). + + * tests/command.c + Removed cruft. + Added test for SFC_CALC_MAX_SIGNAL and SFC_CALC_NORM_MAX_SIGNAL. + + * configure.in + Update version to 1.0.0rc5. + + * sfendian.h + Removed inclusion of un-necessary header. + +2002-08-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c + Minor fixes of info written to log buffer. + + * src/float_cast.h + Add definition of HAVE_LRINT_REPLACEMENT. + + * tests/floating_point_test.c + Fix file hash check on systems without lrint/lrintf. + + * tests/dft_cmp.c + Limit SNR to less than -500.0dB. + + * examples/sndfile2oct.c + Fixed compiler warnings. + + * doc/api.html + Fixed error where last parameter of sf_error_str() was sf_count_t instead + of size_t. + +2002-08-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/FAQ.html + Why doesn't libsndfile do interleaving/de-interleaving. + + * tests/pcm_test.tpl + On Win32 do not perform hash check on files containing doubles. + +2002-08-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h + Defined SF_COUNT_MAX_POSITIVE() macro, a portable way of setting variables + of type sf_count_t to their maximum positive value. + + * src/dwvw.c src/w64.c + Used SF_COUNT_MAX_POSITIVE(). + +2002-07-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/paf.c + Fixed bug in reading/writing of 24 bit PCM PAF files on big endian systems. + + * tests/floating_point_tests.c + Fixed hash values for 24 bit PCM PAF files. + Disabled file has check if lrintf() function is not available and added + warning. + Decreased level of signal from a peak of 1.0 to a value of 0.95 to prevent + problems on platforms without lrintf() ie Solaris. + +2002-07-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c + Fixed a problem with two different kinds of mal-formed WAV file header. The + first had the 'fact' chunk before the 'fmt ' chunk, the other had an + incomplete 'INFO' chunk at the end of the file. + + * src/w64.c + Added fix to allow differentiation between W64 files and ACID files. + + * src/au_g72x.c src/common.h src/sndfile.c + Added error for G72x encoded files with more than one channel. + + * tests/pcm_test.tpl tests/utils.tpl + Moved function check_file_hash_or_die() to utils.tpl. Function was then + modified to calculate the has of the whole file. + + * src/wav.c + Fixed problem writing the 'fact' chunk on big endian systems. + + * tests/sfconvert.c + Fixed bug where .paf files were being written as Sphere NIST. + +2002-07-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/voc.c + Fix for reading headers generated using SFC_UPDATE_HEADER_NOW. + + * doc/command.html + Add docs for SFC_UPDATE_HEADER_NOW and SFC_SET_UPDATE_HEADER_AUTO. + +2002-07-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * man/sndfile-info.1 man/sndfile-play.1 + Added manpages supplied by Joshua Haberman the Debian maintainer for + libsndfile. Additional tweaks by me. + + * configure.in man/Makefile.am + Hooked manpages into autoconf/automake system. + + * src/sndfile.c + Added hooks for SFC_SET_UPDATE_HEADER_AUTO. + + * tests/update_header_test.c + Improved rigor of testing. + + * src/*.c + Fixed problem with *_write_header() functions. + +2002-07-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/*.html + Updates to documentation to fix problems found by wdg-html-validator. + + * src/common.h src/command.c + Added normalize parameter to calls to psf_calc_signal_max() and + psf_calc_max_all_channels(). + + * src/sndfile.c + Added handling for commands SFC_CALC_NORM_SIGNAL_MAX and + SFC_CALC_NORM_MAX_ALL_CHANNELS. + + * doc/command.html + Added entry for SFC_CALC_NORM_SIGNAL_MAX and SFC_CALC_NORM_MAX_ALL_CHANNELS. + +2002-07-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-play.c Win32/Makefile.msvc + Get sndfile-play program working on Win32. The Win32 PCM sample I/O API + sucks. The sndfile-play program now works on Linux, MacOSX, Solaris and + Win32. + +2002-07-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/FAQ.html + New file for frequently asked questsions. + +2002-07-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/api.html + Documentation fixes. + + * src/au.[ch] src/au_g72x.c src/G72x/g72x.h + Add support of 40kbps G723 ADPCM encoding. + + * tests/lossy_comp_test.c tests/floating_point_test.c + Add tests for 40kbps G723 ADPCM encoding. + + * doc/index.html + Update support matrix. + +2002-07-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/command.html + Documented SFC_GET_SIMPLE_FORMAT_COUNT, SFC_GET_SIMPLE_FORMAT, + SFC_GET_FORMAT_* and SFC_SET_ADD_PEAK_CHUNK. + + * src/sndfile.c src/pcm.c + Add ability to turn on and off the addition of a PEAK chunk for floating + point WAV and AIFF files. + + * src/sndfile.[ch] src/common.h src/command.c + Added sf_command SFC_CALC_MAX_ALL_CHANNELS. Implemented by Maurizio Umberto + Puxeddu. + + * doc/command.html + Docs for SFC_CALC_MAX_ALL_CHANNELS (assisted by Maurizio Umberto Puxeddu). + +2002-07-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c src/gsm610.c + Finalised support for GSM 6.10 AIFF files and added support for GSM 6.10 + encoded RAW (header-less) files. + + * src/wav.c + Add support for IBM_FORMAT_MULAW and IBM_FORMAT_ALAW encodings. + + * src/api.html + Fixed more documentation bugs. + +2002-07-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.h src/common.h + Moved some yet-to-be-implelmented values for SF_FORMAT_* from the public + header file sndfile.h to the private header file common.h to avoid + confusion about the actual capabilities of libsndfile. + +2002-07-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c src/wav.c + Fixed file parsing for WAV and AIFF files containing non-audio data after + the data chunk. + + * src/aiff.c src/sndfile.c + Add support for GSM 6.10 encoded AIFF files. + + * tests/lossy_comp_test.c tests/Makefile.am + Add tests for GSM 6.10 encoded AIFF files. + + * src/*.c + Fix compiler warnings. + +2002-07-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/command_test.c + For SFC_SET_NORM_* tests, change the file format from SF_FORMAT_WAV to + SF_FORMAT_RAW. + + * src/sndfile.c + Added sf_command(SFC_TEST_ADD_TRAILING_DATA) to allow testing of reading + from AIFF and WAV files with non-audio data after the audio chunk. + + * src/common.h + Add test commands SFC_TEST_WAV_ADD_INFO_CHUNK and + SFC_TEST_AIFF_ADD_INST_CHUNK. When these commands are working, they will be + moved to src/sndfile.h + + * src/aiff.c src/wav.c + Begin implementation of XXXX_command() hook for sf_command(). + + * tests/write_read_test.tpl + Added sf_command (SFC_TEST_ADD_TRAILING_DATA) to ensure above new code was + working. + +2002-07-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/update_header_test.c + Allow read sample count == write sample count - 1 to fix problems with VOC + files. + + * tests/write_read_test.tpl tests/pcm_test.tpl + Fixed some problems in the test suite discovered by using Valgrind. + +2002-07-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/utils.[ch] tests/*.c + Renamed check_log_buffer() to check_log_buffer_or_die(). + + * src/sndfile.c + SFC_UPDATE_HEADER_NOW and SFC_SETUPDATE_HEADER_AUTO almost finished. Works + for all file formats other than VOC. + +2002-07-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.[ch] src/common.h + Started adding functionality to allow the file header to be updated before + the file is closed on files open for SFM_WRITE. This was requested by + Maurizio Umberto Puxeddu who is using libsndfile for file I/O in iCSound. + + * tests/update_header_test.c + New test program to test that the above functionality is working correctly. + + * tests/peak_chunk_test.c tests/floating_point_test.c + Cleanups. + +2002-07-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sfendian.[ch] + Changed length count parameters for all endswap_XXX() functions from + sf_count_t (which can be 64 bit even on 32 bit architectures) to int. These + functions are only called frin inside the library, are always called with + integer parameters and doing the actual calculation on 64 bit values is + slow in comparision to doing it on ints. + + * examples/sndfile-play.c + More playback hacking for Win32. + +2002-07-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.c + In psf_log_printf(), changed %D format conversion specifier to %M (marker) and + added %D specifier for printing the sf_count_t type. + + * src/*.c + Changed all usage of psf_log_printf() with %D format conversion specifiers + to use %M conversion instead. + + * tests/pcm_test.tpl tests/pcm_test.def + New files to autogen pcm_test.c. + + * src/pcm.c + Fixed bug in scaling floats and doubles to 24 bit PCM and vice versa. + +2002-07-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.in + Fix setup of $ac_cv_sys_largefile_CFLAGS so that sndfile.pc gets valid + values for CFLAGS. + + * examples/sndfile-play.c + Start adding playback support for Win32. + +2002-07-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/*.c + Worked to removed compiler warnings. + Extensive refactoring. + + * src/common.[ch] + Added function psf_memset() which works like the standard C function memset + but takes and sf_count_t as the length parameter. + + * src/sndfile.c + Replaced calls to memset(0 with calls to psf_memset() as required. + +2002-07-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Added "libsndfile : " to the start of all error messages. This was suggested + by Conrad Parker author of Sweep ( http://sweep.sourceforge.net/ ). + + * src/sfendian.[ch] + Added endswap_XXXX_copy() functions. + + * src/pcm.c src/float32.c src/double64.c + Use endswap_XXXX_copy() functions and removed dead code. + Cleanups and optimisations. + +2002-07-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c src/sndfile.h + Gave values to all the SFC_* enum values to allow better control of the + interface as commands are added and removed. + Added new command SFC_SET_ADD_PEAK_CHUNK. + + * src/wav.c src/aiff.c + Modified wav_write_header and aiff_write_header to make addition of a PEAK + chunk optional, even on floating point files. + + * tests/benchmark.tpl + Added call to sf_command(SFC_SET_ADD_PEAK_CHUNK) to turn off addition of a + PEAK chunk for the benchmark where we are trying to miximize speed. + + * src.pcm.c + Changed tribyte typedef to something more sensible. + Further conversion speed ups. + +2002-07-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/command.c + In major_formats rename "Sphere NIST" to "NIST Sphere". + + * src/common.c src/sfendian.c + Moved all endswap_XXX_array() functions to sfendian.c. These functions will + be tweaked to provide maximum performance. Since maximum performance on one + platform does not guarantee maximum performance on another, a small set of + functions will be written and the optimal one chosen at compile time. + + * src/common.h src/sfendian.h + Declarations of all endswap_XXX_array() functions moved to sfendian.h. + + * src/Makefile.am + Add sfendian.c to build targets. + +2002-07-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/pcm.c src/sfendian.h + Re-coded PCM encoders and decoders to match or better the speed of + libsndfile version 0.0.28. + +2002-06-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c + Add checking for WAVPACK data in standard PCM WAV file. Return error if + found. This WAVPACK is *WAY* broken. It uses the same PCM WAV file header + and then stores non-PCM data. + + * tests/benchmark.tpl + Added more tests. + +2002-06-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/benchmark.tpl + Added conditional definition of M_PI. + For Win32, set WRITE_PERMS to 0777. + + * Win32/Makefile.msvc + Added target to make generate program on Win32. + + * src/samplitude.c + Removed handler for Samplitude RAP file format. This file type seems rarer + than hens teeth and is completely undocumented. + + * src/common.h src/sndfile.c src/Makefile.am Win32/Makefile.msvc + Removed references to sampltiude RAP format. + + * tests/benchmark.tpl + Benchmark program now prints the libsndfile version number when run. This + program was also backported to version 0 to compare results. Version + 1.0.0rc2 is faster than version 0.0.28 on most conversions but slower on + some. The slow ones need to be fixed before final release. + +2002-06-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/benchmark.def tests/benchmark.tpl + New files which generate tests/benchmark.c using Autogen. Added int -> + SF_FORMAT_PCM_24 test. + + * tests/benchmark.c + Now and Autogen output file. + + * tests/Makefile.am + Updated for above changes. + +2002-06-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/benchmark.c + Basic benchmark program complete. Need to convert it to Autogen. + + * Win32/Makefile.msvc + Added benchmark.exe target. + +2002-06-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/generate.c + New program to generate a number of different output file formats from a + single input file. This allows testing of the created files. + + * tests/benchmark.c + New test program to benchmark libsndfile. Nowhere near complete yet. + + * examples/Makefile.am tests/Makefile.am + New make rules for the two new programs. + +2002-06-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * Win32/libsndfile.def + Removed definition for sf_signal_max(). + + * src/sndfile.c + Removed cruft. + + * doc/index.html + A number of documentation bugs were fixed. Thanks to Anand Kumria. + + * doc/version-1.html + Minor doc updates. + + * configure.in + Bumped version to 1.0.0rc2. + + * src/sf_command.h src/Makefile.am + Removed the header file as it was no longer being used. Thanks to Anand + Kunria for spotting this. + + * doc/index.html + A number of documentation bugs were fixed. Thanks to Anand Kumria. + +2002-06-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h + Test for Win32 before testing SIZEOF_OFF_T so that it works correctly + on Win32.. + + * src/file_io.c + Win32 fixes to ensure O_BINARY is used for file open. + + * doc/win32.html + New file documenting the building libsndfile on Win32. + + * doc/*.html + Updating of documentation. + +2002-06-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/pcm_test.c + Minor changes to allow easier determination of test file name. + + * src/sndfile.[ch] + Removed function sf_signal_max(). + + * examples/sndfile-play.c + Changed call to sf_signal_max() to a call to sf_command(). + +2002-06-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/format.c src/command.c + Renamed format.c to command.c which will now include code for sf_command() + calls to perform operations other than format commands. + + * src/sndfile.c src/sndfile.h + Removed function sf_get_signal_max() which is replaced by commands passed + to sf_command(). + + * src/command.c + Implement commands SFC_CALC_SIGNAL_MAX. + + * doc/command.html + Documented SFC_CALC_SIGNAL_MAX. + +2002-06-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-play.c + Mods to make sndfile-play work on Solaris. The program sndfile-play now + runs on Linux, MaxOSX and Solaris. Win32 to come. + + * src/format.c + Added SF_FORMAT_DWVW_* to subtype_formats array. + + * src/nist.c + Added support for 8 bit NIST Sphere files. Example file supplied by Anand + Kumria. + +2002-06-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sndfile-info.c + Tidy up of output format. + + * examnples/sndfile-play.c + Mods to make sndfile-play work on MacOSX using Apple's CoreAudio API. + + * configure.in + Add new variables OS_SPECIFIC_INCLUDES and OS_SPECIFIC_LINKS which were + required to supply extra include paths and link parameters to get + sndfile-play working on MacOSX. + + * examples/Makefile.am + Use OS_SPOECIFIC_INCLUDES and OS_SPECIFIC_LINKS to build commands for + sndfile-play. + +2002-06-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/nist.c + Added ability to read/write new NIST Sphere file types (A-law, u-law). + Header parser was re-written from scratch. Example files supplied by Anand + Kumria. + + * src/sndfile.c + Support for A-law and u-law NIST files. + + * tests/Makefile.am tests/lossy_comp_test.c + Tests for A-law and u-law NIST files. + +2002-06-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/utils.c + Fixed an error in error string. + +2002-06-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * acinclude.m4 + Removed exit command to allow cross-compiling. + + * Win32/unistd.h src/file_io.c + Moved contents of first file into the second file (enclosed in #ifdef). + Win32/unistd.h is now an empty file but still must be there for libsndfile + to compile on Win32. + + * src/sd2.c, src/sndfile.c: + Fixes for Sound Designer II files on big endian systems. + +2002-06-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.in + Modified to work around problems with crappy MacOSX version of sed. + Added sanity check for proper values for CFLAGS. + +2002-06-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Code clean up in sf_open (). + + * Win32/Makefile.msvc + Michael Fink's contributed MSVC++ makefile was hacked to bits and put back + together in a new improved form. + + * src/file_io.c + Fixes for Win32; _lseeki64() returns an invalid argument for calls like + _lseeki64(fd, 0, SEEK_CUR) so need to use _telli64 (fd) instead. + + * src/common.h src/sndfile.c src/wav.c src/aiff.c + Added SFE_LOG_OVERRUN error. + Added termination for potential infinite loop when parsing file headers. + + * src/wav.c src/w64.c + Fixed bug casuing incorrect header generation when opening file read/write. + +2002-06-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/api.html + Improved the documentation to make it clearer that the file read method + and the underlying file format are completely disconnected. Suggested + by Josh Green. + + * doc/command.html + Started correcting docs to take into account changes made to the + operations of the sf_command () function. Not complete yet. + + * src/sndfile.c + Reverted some changes which had broken the partially working SDII header + parsing. Now have access to an iBook with OS X so reading and writing SDII + files on all platforms should be a reality in the near future. On Mac this + will involve reading the resource fork via the standard MacOS API. To move + a file from Mac to another OS, the resource and data forks will need to be + combined before transfer. The combined file will be read on both Mac and + other OSes like any other file. + +2002-06-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * ltmain.sh + Applied a patch from http://fink.sourceforge.net/doc/porting/libtool.php + which allows libsndfile to compile on MacOSX 10.1. This patch should not + interfere with compiling on other OSes. + + * src/GSM610/private.h + Changes to fix compile problems on MacOSX (see src/GSM610/ChangeLog). + + * src/float_cast.h + Added MacOSX replacements for lrint() and lrintf(). + +2002-06-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Replaced the code to print the filename to the log buffer when a file is + opened. This code seems to have been left out during the merge of + sf_open_read() and sf_open_write() to make a single functions sf_open(). + +2002-06-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c + Fixed a bug where the WAV header parser was going into an infinite loop + on a badly formed LIST chunk. File supplied by David Viens. + +2002-05-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.in + Added a message at the end of the configuration process to warn about the + need for the use of pkg-config when linking programs against version 1 of + libsndfile. + + * doc/pkg-config.html + New documentation file containing details of how to use pkg-config to + retrieve settings for CFLAGS and library locations for linking files + against version 1 of libsndfile. + +2002-05-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c + Fixed minor bug in handling of so-called ACIDized WAV files. + +2002-05-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * Win32/libsndfile.def Win32/Makefile.msvc + Two new files contributed by Michael Fink (from the winLAME project) + which allows libsndfile to be built on windows in a MSDOS box by doing + "nmake -f Makefile.msvc". Way cool! + +2002-05-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.in + MacOSX is SSSOOOOOOO screwed up!!! I can't believe how hard it is to + generate a tarball which will configure and compile on that platform. + Joined the libtool mailing list to try and get some answers. + +2002-05-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.in + Changed to autoconf version 2.50. MacOSX uses autoconf version 2.53 which + is incompatible with with version 2.13 which had been using until now. + The AC_SYS_LARGE_FILE macro distributed withe autoconf 2.50 is missing a + few features so AC_SYS_EXTRA_LARGE file was defined to replace it. + + * configure.in + Changed to automake version 1.5 to try and make a tarball which will + work on MacOSX. + +2002-05-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav_gsm610.c + Changed name to gsm610.c. Added reading/writing of headerless files. + + * src/sndfile.c src/raw.c + Added ability to read/write headerless (SF_FORMAT_RAW) GSM 6.10 files. + +2002-05-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/lossy_comp_test.c + Clean up in preparation for Autogen-ing this file. + + * src/GSM610/*.[ch] + Code cleanup and prepartion forgetting file seek working. Details in + src/GSM610/ChangeLog. + + * sndfile.pc.in + Testing complete. Is sndfile.m4 still needed? + +2002-05-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/write_read_test.tpl tests/rdwr_test.tpl + Merged tests from these two programs into write_read_test.tpl and deleted + rdwr_test.tpl. + +2002-05-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/w64.c src/svx.c src/paf.c + Fixed bugs in read/write mode. + +2002-05-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/Makefile.am + Renamed sfplay.c to sndfile-play.c and sndfile_info.c to sndfile-info.c for + consistency when these programs become part of the Debian package + sndfile-programs. + + * sndfile.pc.in + New file to replace sndfile-config.in. Libsndfile now uses the pkg-config + model for providing installation parameters to dependant programs. + + * src/sndfile.c + Cleanup of code in sf_open(). + +2002-05-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/utils.tpl tests/write_read_test.tpl + More conversion to Autogen fixes and enchancements. + + * src/*.c + Read/write mode is now working for 16, 24 and 32 bit PCM as well as 32 + bit float and 64 bit double data. More tests still required. + + * src/Makefile.am + Added DISTCLEANFILES target to remove config.status and config.last. + + * Win32/Makefile.am MacOS/Makefile.am + Added DISTCLEANFILES target to remove Makefile. + +2002-05-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/*.[ch] tests/rdwr_test.c + More verifying workings of read/write mode. Fixing bugs found. + + * tests/utils.[ch] + Made these files Autogen generated files. + + * tests/util.tpl tests/util.def + New Autogen files to generate utils.[ch]. Moved some generic test functions + into this file. Autogen is such a great tool! + +2002-05-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/pcm.c src/float_cast.h Win32/config.h + Fixed a couple of Win32 specific bugs pointed out by Michael Fink + (maintainer of WinLAME) and David Viens. + + * tests/check_log_buffer.[ch] tests/utils.[ch] + Moved check_log_buffer() to utils.[ch] and deleted old file. + +2002-05-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.[ch] src/sndfile.c + New function psf_default_seek() which will be the default seek function + for things like PCM and floating point data. This default is set for + both read and write in sf_open() but can be over-ridden by any codec + during it's initialisation. + +2002-05-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/au.c + AU files use a data size value of -1 to mean unknown. Fixed au_open_read() + to allow opening files like this. + + * tests/rdwr_test .c + Added more tests. + + * src/sndfile.c + Fixed bugs in read/write mode found due to improvements in the test + program. + +2002-04-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/rdwr_test .c + New file for testing read/write mode. + +2002-04-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * m4/* + Removed all m4 macros from this directory as they get concatenated to form + the file aclocal.m4 anyway. + + * sndfile.m4 + Moved this from the m4 directory to the root directory asn this is part of + the distribution and is installed during "make install". + +2002-04-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/float32.c + Removed logging of peaks for all file formats other than AIFF and WAV. + + * tests/write_read_test.tpl tests/write_read_test.def + New files which autogen uses to generate write_read_test.c. Doing it this + way makes write_read_test.c far easier to maintain. Other test programs + will be converted to autogen in the near future. + + * src/*.c + Fixed a few bugs found when testing on Sparc (bug endian) Solaris. + +2002-04-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * doc/*.html + Fixed documention versioning. + + * configure.in + Fixed a bug in the routines which search for Large File Support on systems + which have large file support by defualt. + +2002-04-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/*.[ch] + Found and fixed an issue which can cause a bug in other software (I was + porting Conrad Parker's Sweep program from version 0 of the library to + version 1). When opening a file for write, the libsndfile code would + set the sfinfo.samples field to a maximum value. + + * tests/write_read_test.c + Added tests to detect the above problem. + +2002-04-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/*.[ch] + Finished base implementation of read/write mode. Much more testing still + needed. + + * m4/largefile.m4 + Macro for detecting Large File Standard capabilities. This macro was ripped + out of the aclocal.m4 file of GNU tar-1.13. + + * configure.in + Added detection of large file support. Files larger than 2 Gigabytes should + now be supported on 64 bit platforms and many 32 bit platforms including + Linux (2.4 kernel, glibc-2.2), *BSD, MacOS, Win32. + + * libsndfile_convert_version.py + A Python script which attempts to autoconvert code written to use version 0 + to version 1. + +2002-04-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/*.[ch] + Finished base implementation of read/write mode. Much more testing still + needed. + + * tests/write_read_test.c + Preliminary tests for read/write mode added. More needed. + +2002-04-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.[ch] + Removed sf_open_read() and sf_open_write() functions,replacting them with + sf_open() which takes an extra mode parameter (SF_OPEN_READ, SF_OPEN_WRITE, + or SF_OPEN_RDWR). This new function sf_open can now be modified to allow + opening a file formodification (RDWR). + +2002-04-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/*.c + Completed merging of separate xxx_open_read() and xxx_open_write() + functions. All tests pass. + +2002-04-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/au.c + Massive refactoring required to merge au_open_read() with au_open_write() + to create au_open(). + +2002-04-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/*.c + Started changes required to allow a sound file to be opened in read/write + mode, with separate file pointers for read and write. This involves merging + of encoder/decoder functions like pcm_read_init() and pcm_write_init() + int a new function pcm_init() as well as doing something similar for all + the file type specific functions ie aiff_open_read() and aiff_open_write() + were merged to make the function aiff_open(). + +2002-04-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/file_io.c + New file containing psf_fopen(), psf_fread(), psf_fwrite(), psf_fseek() and + psf_ftell() functions. These function will replace use of fopen/fread/fwrite + etc and allow access to files larger than 2 gigabytes on a number of 32 bit + OSes (Linux on x86, 32 bit Solaris user space apps, Win32 and MacOS). + + * src/*.c + Replaced all instances of fopen with psf_open, fread with psd_read, fwrite + with psf_write and so on. + +2002-03-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/dwvw.c + Finally fixed all known problems with 12, 16 and 24 bit DWVW encoding. + + * tests/floating_point_test.c + Added tests for 12, 16 and 24 bit DWVW encoding. + +2002-03-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * m4/endian.m4 + Defines a new m4 macro AC_C_FIND_ENDIAN, for determining the endian-ness of + the target CPU. It first checks for the definition of BYTE_ORDER in + <endian.h>, then in <sys/types.h> and <sys/param.h>. If none of these work + and the C compiler is not a cross compiler it compiles and runs a program + to test for endian-ness. If the compiler is a cross compiler it makes a + guess based on $target_cpu. + + * configure.in + Modified to use AC_C_FIND_ENDIAN. + + * src/sfendian.h + Simplified. + +2002-02-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/floating_point_test.c + Tests completely rewritten using the dft_cmp function. Now able to + calculate a quick guesstimate of the Signal to Noise Ratio of the encoder. + +2002-02-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/dft_cmp.[ch] + New files containing functions for comparing pre and post lossily + compressed data using a quickly hacked DFT. + + * tests/utils.[ch] + New files containing functions for saving pre and post encoded data in a + file readable by the GNU Octave package. + +2002-02-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * m4/lrint.m4 m4/lrintf.m4 + Fixed m4 macros to define HAVE_LRINT and HAVE_LRINTF even when the test + is cached. + +2002-02-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/floating_point_test.c + Fixed improper use of strncat (). + +2002-02-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/headerless_test.c + New test program to test the ability to open and read a known file type as a + RAW header-less file. + +2002-02-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/losy_comp_test.c + Added a test to ensure that the data read from a file is not all zeros. + + * examples/sfconvert.c + Added "-gsm610" encoding types. + +2002-01-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sfconvert.c + Added "-dwvw12", "-dwvw16" and "-dwvw24" encoding types. + + * tests/dwvw_test.c + New file for testing DWVW encoder/decoder. + +2002-01-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/dwvw.c + Implemented writing of DWVW. 12 bit seems to work, 16 and 24 bit still broken. + + * src/aiff.c + Improved reporting of encoding types. + + * src/voc.c + Clean up. + +2002-01-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/dwvw.c + New file implementing lossless Delta Word Variable Width (DWVW) encoding. + Reading 12 bit DWVW is now working. + + * src/aiff.c common.h sndfile.c + Added hooks for DWVW encoded AIFF and RAW files. + +2002-01-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/w64.c + Robustify header parsing. + + * src/wav_w64.h + Header file wav.h was renamed to wav_w64.h to signify sharing of + definitions across the two file types. + + * src/wav.c src/w64.c src/wav_w64.c + Refactoring. + Modified and moved functions with a high degree of similarity between + wav.c and w64.c to wav_w64.c. + +2002-01-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/w64.c + Completed work on getting read and write working. + + * examples/sfplay.c + Added code to scale floating point data so it plays at a reasonable volume. + + * tests/Makefile.am tests/write_read_test.c + Added tests for W64 files. + +2002-01-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/*.c + Modded all code in file header writing routines to use + psf_new_binheader_writef(). + Removed psf_binheader_writef() from src/common.c. + Globally replaced psf_new_binheader_writef with psf_binheader_writef. + +2002-01-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/*.c + Modded all code in file parsing routines to use psf_new_binheader_readf(). + Removed psf_binheader_readf() from src/common.c. + Globally replaced psf_new_binheader_readf with psf_binheader_readf. + + * src/common.[ch] + Added new function psf_new_binheader_writef () which will soon replace + psf_binheader_writef (). The new function has basically the same function + as the original but has a more flexible and capable interface. It also + allows the writing of 64 bit integer values for files contains 64 bit file + offsets. + +2002-01-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/formats.c src/sndfile.c src/sndfile.h + Added code allowing full enumeration of supported file formats via the + sf_command () interface. + This feature will allow applications to avoid needing recompilation when + support for new file formats are added to libsndfile. + + * tests/command_test.c + Added test code for the above feature. + + * examples/list_formats.c + New file. An example of the use of the supported file enumeration + interface. This program lists all the major formats and for each major + format the supported subformats. + +2002-01-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/*.[ch] tests/*.c + Changed command parameter of sf_command () function from a test string to + an int. The valid values for the command parameter begin with SFC_ and are + listed in src/sndfile.h. + +2001-12-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/formats.c src/sndfile.c + Added an way of enumerating a set of common file formats using the + sf_command () interface. This interface was suggested by Dominic Mazzoni, + one of the main authors of Audacity (http://audacity.sourceforge.net/). + +2001-12-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Added checking of filename parameter in sf_open_read (). Previousy, if a + NULL pointer was passed the library would segfault. + +2001-12-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.c src/common.h + Changed the len parameter of the endswap_*_array () functions from type + int to type long. + + * src/pcm.c + Fixed a problem which + +2001-12-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Added conditional #include <sys/types.h> for EMX/gcc on OS/2. Thanks to + Paul Hartman for pointing this out. + + * tests/lossy_comp_test.c tests/floating_point_test.c + Added definitions for M_PI for when it isn't defined in <math.h>. + +2001-11-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/ircam.c + Re-implemented the header reader. Old version was making incorrect + assumptions about the endian-ness of the file from the magic number at the + start of the file. The new code looks at the integer which holds the + number of channels and determines the endian-ness from that. + +2001-11-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c + Added support for other AIFC types ('raw ', 'in32', '23ni'). + Further work on IMA ADPCM encoding. + +2001-11-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/ima_adpcm.c + Renamed from wav_ima_adpcm.c. This file will soon handle IMA ADPCM + encodings for both WAV and AIFF files. + + * src/aiff.c + Started adding IMA ADPCM support. + +2001-11-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/double.c + New file for handling double precision floating point (SF_FORMAT_DOUBLE) + data. + + * src/wav.c src/aiff.c src/au.c src/raw.c + Added support for SF_FORMAT_DOUBLE data. + + * src/common.[ch] + Addition of endswap_long_array () for endian swapping 64 bit integers. This + function will work correctly on processors with 32 bit and 64 bit longs. + Optimised endswap_short_array () and endswap_int_array (). + + * tests/pcm_test.c + Added and extra check. After the first file of each type is written to disk + a checksum is performed of the first 64 bytes and checked against a pre- + calculated value. This will work whatever the endian-ness of the host + machine. + +2001-11-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c + Added handling of u-law, A-law encoded AIFF files. Thanks to Tom Erbe for + supplying example files. + + * tests/lossy_comp_test.c + Added tests for above. + + * src/common.h src/*.c + Removed function typedefs from common.h and function pointer casting in all + the other files. This allows the compiler to perform proper type checking. + Hopefully this will prevernt problems like the sf_seek bug for OpenBSD, + BeOS etc. + + * src/common.[ch] + Added new function psf_new_binheader_readf () which will eventually replace + psf_binheader_readf (). The new function has basically the same function as + the original but has a more flexible and capable interface. It also allows + the reading of 64 bit integer values for files contains 64 bit file + offsets. + +2001-11-26 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/voc.c + Completed implementation of VOC file handling. Can now handle 8 and 16 bit + PCM, u-law and A-law files with one or two channels. + + * src/write_read_test.c tests/lossy_comp_test.c + Added tests for VOC files. + +2001-11-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/float_cast.h + Added inline asm version of lrint/lrintf for MacOS. Solution provided by + Stephane Letz. + + * src/voc.c + More work on this braindamaged format. The VOC files produced by SoX also + have a number of inconsistencies. + +2001-11-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/paf.c + Added support for 8 bit PCM PAF files. + + * tests/write_read_test.c + Added tests for 8 bit PAF files. + +2001-11-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/pcm_test.c + New test program to test for correct scaling of integer values between + different sized integer containers (ie short -> int). + The new specs for libsndfile state that when the source and destination + containers are of a different size, the most significant bit of the source + value becomes the most significant bit of the destination container. + + * src/pcm.c src/paf.c + Modified to pass the above test program. + + * tests/write_read_test.c tests/lossy_comp_test.c + Modified to work with the new scaling rules. + +2001-11-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/raw.c tests/write_read_test.c tests/write_read_test.c + Added ability to do raw reads/writes of float, u-law and A-law files. + + * src/*.[ch] examples/*.[ch] tests/*.[ch] + Removed dependance on pcmbitwidth field of SF_INFO struct and moved to new + SF_FORMAT_* types and use of SF_ENDIAN_BIG/LITTLE/CPU. + +2001-11-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/*.[ch] + Started implmentation of major changes documented in doc/version1.html. + + Removed all usage of off_t which is not part of the ISO C standard. All + places which were using it are now using type long which is the type of + the offset parameter for the fseek function. + This should fix problems on BeOS, MacOS and *BSD like systems which were + failing "make check" because sizeof (long) != sizeof (off_t). + +-------------------------------------------------------------------------------- +This is the boundary between version 1 of the library above and version 0 below. +-------------------------------------------------------------------------------- + +2001-11-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sfplay_beos.cpp + Added BeOS version of sfplay.c. This needs to be compiled using a C++ + compiler so is therefore not built by default. Thanks to Marcus Overhagen + for providing this. + +2001-11-10 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sfplay.c + New example file showing how libsndfile can be used to read and play a + sound file. + At the moment on Linux is supported. Others will follow in the near future. + +2001-11-09 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/pcm.c + Fixed problem with normalisation code where a value of 1.0 could map to + a value greater than MAX_SHORT or MAX_INT. Thanks to Roger Dannenberg for + pointing this out. + +2001-11-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/pcm.c + Fixed scaling issue when reading/writing 8 bit files using + sf_read/sf_write_short (). + On read, values are scaled so that the most significant bit in the char + ends up in the most significant bit of the short. On write, values are + scaled so that most significant bit in the short ends up as the most + significant bit in the char. + +2001-11-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/au.c src/sndfile.c + Added support for 32 bit float data in big and little endian AU files. + + * tests/write_read_test.c + Added tests for 32 bit float data in AU files. + +2001-11-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/lossy_comp_test.c + Finalised testing of stereo files where possible. + +2001-11-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav_ms_adpcm.c + Fixed bug in writing stereo MS ADPCM WAV files. Thanks to Xu Xin for + pointing out this problem. + +2001-10-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav_ms_adpcm.c + Modified function srate2blocksize () to handle 44k1Hz stereo files. + +2001-10-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/w64.c + Added support for Sonic Foundry 64 bit WAV format. As Linux (my main + development platform) does not yet support 64 bit file offsets by default, + current handling of this file format treats everything as 32 bit and fails + openning the file, if it finds anything that goes beyond 32 bit values. + + * src/sndfile.[hc] src/common.h src/Makefile.am + Added hooks for W64 support. + +2001-10-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.in + Added more warnings options to CFLAGS when the gcc compiler is detected. + + * src/*.[ch] tests/*.c examples/*.c + Started fixing the warning messages due to the new CFLASG. + + * src/voc.c + More work on VOC file read/writing. + + * src/paf.c + Found that PAF files were not checking the normalisation flag when reading + or writing floats and doubles. Fixed it. + + * tests/floating_point_test.c + Added specific test for the above problem. + + * src/float_cast.h src/pcm.c + Added a section for Win32 to define lrint () and lrintf () in the header + and implement it in the pcm.c + +2001-10-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * sndfile-config.in m4/sndfile.m4 + These files were donated by Conrad Parker who also provided instructions + on how to install them using autoconf/automake. + + * src/float_cast.h + Fiddled around with this file some more. On Linux and other gcc supported + OSes use the C99 functions lrintf() and lrint() for casting from floating + point to int without incurring the huge perfromance penalty (particularly + on the i386 family) caused by the regular C cast from float to int. + These new C99 functions replace the FLOAT_TO_* and DOUBLE_TO_* macros which + I had been playing with. + + * configure.in m4/lrint.m4 m4/lrintf.m4 + Add detection of these functions. + +2001-10-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/voc.c + Completed code for reading VOC files containing a single audio data + segment. + Started implementing code to handle files with multiple VOC_SOUND_DATA + segments but couldn't be bothered finishing it. Multiple segment files can + have different sample rates for different sections and other nasties like + silence and repeat segments. + +2001-10-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h src/*.c + Removed SF_PRIVATE struct field fdata and replaced it with extra_data. + + * src/voc.c + Further development of the read part of this woefult file format. + +2001-10-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/float_cast.h + Implemented gcc and i386 floating point to int cast macros. Standard cast + will be used when not on gcc for i385. + + * src/pcm.c + Modified all uses of FLOAT/DOUBLE_TO_INT and FLOAT/DOUBLE_TO_SHORT casts to + comply with macros in float_cast.h. + +2001-10-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/voc.c + Changed the TYPE_xxx enum names to VOC_TYPE_xxx to prevent name clashes + on MacOS with CodeWarrior 6.0. + + * MacOS/MacOS-readme.txt + Updated the compile instructions. Probably still need work as I don't have + access to a Mac. + +2001-10-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c src/aiff.c common.c + Changed all references to snprintf to LSF_SNPRINTF and all vsnprintf to + LSF_VSNPRINTF. LSF_VSNPRINTF and LSF_VSNPRINTF are defined in common.h. + + * src/common.h + Added checking of HAVE_SNPRINTF and HAVE_VSNPRINTF and defining + LSF_VSNPRINTF and LSF_VSNPRINTF to appropriate values. + + * src/missing.c + New file containing a minimal implementation of snprintf and vsnprintf + functions named missing_snprintf and missing_vsnprintf respectively. These + are only compliled into the binary if snprintf and/or vsnprintf are not + available. + +2001-09-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/ircam.c + New file to handle Berkeley/IRCAM/CARL files. + + * src/sndfile.c src/common.h + Modified for IRCAM handling. + + * tests/*.c + Added tests for IRCAM files. + +2001-09-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c + Apparently microsoft windows (tm) doesn't like ulaw and Alaw WAV files with + 20 byte format chunks (contrary to ms's own documentation). Fixed the WAV + header writing code to generate smaller ms compliant ulaw and Alaw WAV + files. + +2001-09-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/stdio_test.sh tests/stdio_test.c + Shell script was rewritten as a C program due to incompatibilities of the + sh shell on Linux and Solaris. + +2001-09-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/stdio_test.sh tests/stdout_test.c tests/stdin_test.c + New test programs to verify the correct operation of reading from stdin and + writing to stdout. + + * src/sndfile.c wav.c au.c nist.c paf.c + Fixed a bugs uncovered by the new test programs above. + +2001-09-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c wav.c + Fixed a bug preventing reading a file from stdin. Found by T. Narita. + +2001-09-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h + Fixed a problem on OpenBSD 2.9 which was causing sf_seek() to fail on IMA + WAV files. Root cause was the declaration of the func_seek typedef not + matching the functions it was actually being used to point to. In OpenBSD + sizeof (off_t) != sizeof (int). Thanks to Heikki Korpela for allowing me + to log into his OpenBSD machine to debug this problem. + +2001-09-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Implemented sf_command ("norm float"). + + * src/*.c + Implemented handling of sf_command ("set-norm-float"). Float normalization + can now be turned on and off. + + * tests/double_test.c + Renamed to floating_point_test.c. Modified to include tests for all scaled + reads and writes of floats and doubles. + + * src/au_g72x.c + Fixed bug in normalization code found with improved floating_point_test + program. + + * src/wav.c + Added code for parsing 'INFO' and 'LIST' chunks. Will be used for extract + text annotations from WAV files. + + * src/aiff.c + Added code for parsing '(c) ' and 'ANNO' chunks. Will be used for extract + text annotations from WAV files. + +2001-09-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sf_info.c example/Makefile.am + Renamed to sndfile_info.c. The program sndfile_info will now be installed + when the library is installed. + + * src/float_cast.h + New file defining floating point to short and int casts. These casts will + eventually replace all flot and double casts to short and int. See comments + at the top of the file for the reasoning. + + * src/*.c + Changed all default float and double casts to short or int with macros + defined in floatcast.h. At the moment these casts do nothing. They will be + replaced with faster float to int cast operations in the near future. + +2001-08-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/command_test.c + New file for testing sf_command () functionality. + + * src/sndfile.c + Revisiting of error return values of some functions. + Started implementing sf_command () a new function will allow on-the-fly + modification of library behaviour, or instance, sample value scaling. + + * src/common.h + Added hook for format specific sf_command () calls to SNDFILE struct. + + * doc/api.html + Updated and errors corrected. + + * doc/command.html + New documentation file explaining new sf_command () function. + +2001-08-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Fixed error return values from sf_read*() and sf_write*(). There were + numerous instances of -1 being returned through size_t. These now all set + error int the SF_PRIVATE struct and return 0. Thanks to David Viens for + spotting this. + +2001-08-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.c + Fixed use of va_arg() calls that were causing warning messages with the + latest version of gcc (thanks Maurizio Umberto Puxeddu). + +2001-07-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/*.c src/sfendian.h + Moved definition of MAKE_MARKER macro to sfendian.h + +2001-07-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Modified sf_get_lib_version () so that version string will be visible using + the Unix strings command. + + * examples/Makefile.am examples/sfinfo.c + Renamed sfinfo program and source code to sf_info. This prevents a name + clash with the program included with libaudiofile. + +2001-07-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/read_seek_test.c tests/lossy_comp_test.c + Added tests for sf_read_float () and sf_readf_float (). + + * src/voc.c + New files for handling Creative Voice files (not complete). + + * src/samplitude.c + New files for handling Samplitude files (not complete). + +2001-07-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c src/au.c src/paf.c src/svx.c src/wav.c + Converted these files to using psf_binheader_readf() function. Will soon be + ready to attempt to make reading writing from pipes work reliably. + + * src/*.[ch] + Added code for sf_read_float () and sf_readf_float () methods of accessing + file data. + +2001-07-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/paf.c src/wav_gsm610.c + Removed two printf()s which had escaped notice for some time (thanks + Sigbjørn Skjæret). + +2001-07-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav_gsm610.c + Fixed a bug which prevented GSM 6.10 encoded WAV files generated by + libsndfile from being played in Windoze (thanks klay). + +2001-07-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.[ch] + Implemented psf_binheader_readf() which will do for file header reading what + psf_binheader_writef() did for writing headers. Will eventually allow + libsndfile to read and write from pipes, including named pipes. + +2001-07-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * MacOS/config.h Win32/config.h + Attempted to bring these two files uptodate with src/config.h. As I don't + have access to either of these systems support for them may be completely + broken. + +2001-06-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/float32.c + Fixed bug for big endian processors that can't read 32 bit IEEE floats. Now + tested on Intel x86 and UltraSparc processors. + +2001-06-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c + Modified to allow REX files (from Propellorhead's Recycle and Reason + programs) to be read. + REX files are basically an AIFF file with slightly unusual sequence of + chunks (AIFF files are supposed to allow any sequence) and some extra + application specific information. + Not yet able to write a REX file as the details of the application specific + data is unknown. + +2001-06-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c + Fixed endian bug when reading PEAK chunk on big endian machines. + + * src/common.c + Fixed endian bug when reading PEAK chunk on big endian machines with + --enable-force-broken-float configure option. + Fix psf_binheader_writef for (FORCE_BROKEN_FLOAT ||______) + +2001-06-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.in src/config.h.in + Removed old CAN_READ_WRITE_x86_IEEE configure variable now that float + capabilities are detected at run time. + Added FORCE_BROKEN_FLOAT to allow testing of broken float code on machines + where the processor can in fact handle floats correctly. + + * src/float32.c + Rejigged code reading and writing of floats on broken processors. + + * m4/ + Removed this directory and all its files as they are no longer needed. + +2001-06-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/peak_chunk_test.c + New test to validate reading and writing of peak chunk. + + * examples/sfconvert + Added -float32 option. + + * src/*.c + Changed all error return values to negative values (ie the negative of what + they were). + + * src/sndfile.c tests/error_test.c + Modified to take account of the previous change. + +2001-06-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/float32.c + File renamed from wav_float.c and renamed function to something more + general. + Added runtime detection of floating point capabilities. + Added recording of peaks during write for generation of PEAK chunk. + + * src/wav.c src/aiff.c + Added handing for PEAK chunk for floating point files. PEAK is read when the + file headers are read and generated when the file is closed. Logic is in + place for adding PEAK chunk to end of file when writing to a pipe (reading + and writing from/to pipe to be implemented soon). + + * src/sndfile.c + Modified sf_signal_max () to use PEAK values if present. + +2001-06-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/*.c + Added pcm_read_init () and pcm_write_init () to src/pcm.c and removed all + other calls to functions in this file from the filetype specific files. + + * src/*.c + Added alaw_read_init (), alaw_write_int (), ulaw_read_init () and + ulaw_write_init () and removed all other calls to functions in alaw.c and + ulaw.c from the filetype specific files. + + * tests/write_read_test.c + Added tests to validate sf_seek () on all file types. + + * src/raw.c + Implemented raw_seek () function to fix a bug where + sf_seek (file, 0, SEEK_SET) on a RAW file failed. + + * src/paf.c + Fixed a bug in paf24_seek () found due to added seeks tests in + tests/write_read_test.c + +2001-06-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/read_seek_test.c + Fixed a couple of broken binary files. + + * src/aiff.c src/wav.c + Added handling of PEAK chunks on file read. + +2001-05-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * check_libsndfile.py + New file for the regression testing of libsndfile. + check_libsndfile.py is a Python script which reads in a file containing + filenames of audio files. Each file is checked by running the examples/sfinfo + program on them and checking for error or warning messages in the libsndfile + log buffer. + + * check_libsndfile.list + This is an example list of audio files for use with check_libsndfile.py + + * tests/lossy_comp_test.c + Changed the defined value of M_PI for math header files which don't have it. + This fixed validation test failures on MetroWerks compilers. Thanks to Lord + Praetor Satanus of Acheron for bringing this to my attention. + +2001-05-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.[ch] + Removed psf_header_setf () which was no longer required after refactoring + and simplification of header writing. + Added 'z' format specifier to psf_binheader_writef () for zero filling header + with N bytes. Used by paf.c and nist.c + + * tests/check_log_buffer.c + New file implementing check_log_buffer () which reads the log buffer of a + SNDFILE* object and searches for error and warning messages. Calls exit () + if any are found. + + * tests/*.c + Added calls to check_log_buffer () after each call to sf_open_XXX (). + +2001-05-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c src/wav_ms_adpcm.c src/wav_gsm610.c + Major rehack of header writing using psf_binheader_writef (). + +2001-05-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c src/wav_ima_adpcm.c + Major rehack of header writing using psf_binheader_writef (). + +2001-05-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c + Changed return type of get_encoding_str () to prevent compiler warnings on + Mac OSX. + + * src/aiff.c src/au.c + Major rehack of header writing using psf_binheader_writef (). + +2001-05-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h src/common.c + Added comments. + Name of log buffer changed from strbuffer to logbuffer. + Name of log buffer index variable changed from strindex to logindex. + + * src/*.[ch] + Changed name of internal logging function from psf_sprintf () to + psf_log_printf (). + Changed name of internal header generation functions from + psf_[ab]h_printf () to psf_asciiheader_printf () and + psf_binheader_writef (). + Changed name of internal header manipulation function psf_hsetf () to + psf_header_setf (). + +2001-05-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/nist.c + Fixed reading and writing of sample_byte_format header. "01" means little + endian and "10" means big endian regardless of bit width. + + * configure.in + Detect Mac OSX and disable -Wall and -pedantic gcc options. Mac OSX is + way screwed up and spews out buckets of warning messages from the system + headers. + Added --disable-gcc-opt configure option (sets gcc optimisation to -O0 ) for + easier debugging. + Made decision to harmonise source code version number and .so library + version number. Future releases will stick to this rule. + + * doc/new_file_type.HOWTO + New file to document the addition of new file types to libsndfile. + +2001-05-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/nist.c + New file for reading/writing Sphere NIST audio file format. + Originally requested by Elis Pomales in 1999. + Retrieved from unstable (and untouched for 18 months) branch of libsndfile. + Some vital information gleaned from the source code to Bill Schottstaedt's + sndlib library : ftp://ccrma-ftp.stanford.edu/pub/Lisp/sndlib.tar.gz + Currently reading and writing 16, 24 and 32 bit, big-endian and little + endian, stereo and mono files. + + * src/common.h src/common.c + Added psf_ah_printf () function to help construction of ASCII headers (ie NIST). + + * configure.in + Added test for vsnprintf () required by psf_ah_printf (). + + * tests/write_read_test.c + Added tests for supported NIST files. + +2001-05-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/write_read_test.c + Added tests for little endian AIFC files. + + * src/aiff.c + Minor re-working of aiff_open_write (). + Added write support for little endian PCM encoded AIFC files. + +2001-05-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c + Minor re-working of aiff_open_read (). + Added read support for little endian PCM encoded AIFC files from the Mac + OSX CD ripper program. Guillaume Lessard provided a couple of sample files + and a working patch. + The patch was not used as is but gave a good guide as to what to do. + +2001-05-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.h + Fixed comments about endian-ness of WAV and AIFF files. Guillaume Lessard + pointed out the error. + +2001-04-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/make_sine.c + Re-write of this example using sample rate and required frequency in Hz. + +2001-02-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Fixed bug that prevented known file types from being read as RAW PCM data. + +2000-12-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c + Added handing of COMT chunk. + +2000-11-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sfconvert.c + Fixed bug in normalisatio code. Pointed out by Johnny Wu. + +2000-11-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * Win32/config.h + Fixed the incorrect setting of HAVE_ENDIAN_H parameter. Win32 only issue. + +2000-10-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/Makefile.am + Added -lm for write_read_test_LDADD. + +2000-10-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c src/au.c + Fixed bug which prevented writing of G723 24kbps AU files. + + * tests/lossy_comp_test.c + Corrrection to options for G723 tests. + + * configure.in + Added --disable-gcc-pipe option for DJGPP compiler (gcc on MS-DOS) which + doesn't allow gcc -pipe option. + +2000-09-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/ulaw.c src/alaw.c src/wav_imaadpcm.c src/msadpcm.c src/wav_gsm610.c + Fixed normailsation bugs shown up by new double_test program. + +2000-08-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/pcm.c + Fixed bug in normalisation code (spotted by Steve Lhomme). + + * tests/double_test.c + New file to test scaled and unscaled sf_read_double() and sf_write_double() + functions. + +2000-08-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * COPYING + Changed to the LGPL COPYING file (spotted by H. S. Teoh). + +2000-08-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.h + Removed prototype of unimplemented function sf_get_info(). Added prototype + for sf_error_number() Thanks to Sigbjørn Skjæret for spotting these. + +2000-08-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/newpcm.h + New file to contain a complete rewrite of the PCM data handling. + +2000-08-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Fixed a leak of FILE* pointers in sf_open_write(). Thanks to Sigbjørn + Skjæret for spotting this one. + +2000-08-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/au_g72x.c src/G72x/g72x.c + Added G723 encoded AU file support. + + * tests/lossy_comp_test.c + Added tests for G721 and G723 encoded AU files. + +2000-08-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * all files + Changed the license to LGPL. Albert Faber who had copyright on + Win32/unistd.h gave his permission to change the license on that file. All + other files were either copyright erikd AT mega-nerd DOT com or copyright + under a GPL/LGPL compatible license. + +2000-08-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/lossy_comp_test.c + Fixed incorrect error message. + + * src/au_g72x.c src/G72x/* + G721 encoded AU files now working. + + * Win32/README-Win32.txt + Replaced this file with a new one which gives a full explanation + of how to build libsndfile under Win32. Thanks to Mike Ricos. + +2000-08-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/*.[ch] + Removed double leading underscores from the start of all variable and + function names. Identifiers with a leading underscores are reserved + for use by the compiler. + + * src/au_g72x.c src/G72x/* + Continued work on G721 encoded AU files. + +2000-07-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/G72x/* + New files for reading/writing G721 and G723 ADPCM audio. These files + are from a Sun Microsystems reference implementation released under a + free software licence. + Extensive changes to this code to make it fit in with libsndfile. + See the ChangeLog in this directory for details. + + * src/au_g72x.c + New file for G721 encoded AU files. + +2000-07-08 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * libsndfile.spec.in + Added a spec file for making RPMs. Thanks to Josh Green for supplying this. + +2000-06-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c src/sndfile.h + Add checking for and handling of header-less u-law encoded AU/SND files. + Any file with a ".au" or ".snd" file extension and without the normal + AU file header is treated as an 8kHz, u-law encoded file. + + * src/au.h + New function for opening a headerless u-law encoded file for read. + +2000-06-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/paf.c + Add checking for files shorter than minimal PAF file header length. + +2000-06-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/write_read_test.c + Added extra sf_perror() calls when sf_write_XXXX fails. + +2000-05-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.c + Modified usage of va_arg() macro to work correctly on PowerPC + Linux. Thanks to Kyle Wheeler for giving me ssh access to his + machine while I was trying to track this down. + + * configure.in src/*.[ch] + Sorted out some endian-ness issues brought up by PowerPC Linux. + + * tests/read_seek_test.c + Added extra debugging for when tests fail. + +2000-05-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c + Fixed bug in GSM 6.10 handling for big-endian machines. Thanks + to Sigbjørn Skjæret for reporting this. + +2000-04-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c src/wav.c src/wav_gsm610.c + Finallised writing of GSM 6.10 WAV files. + + * tests/lossy_comp_test.c + Wrote new test code for GSM 6.10 files. + + * examples/sfinfo.c + Fixed incorrect format in printf() statement. + +2000-04-06 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.h.in + Fixed comments about sf_perror () and sf_error_str (). + +2000-03-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.in + Fixed --enable-justsrc option. + +2000-03-07 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * wav.c + Fixed checking of bytespersec field of header. Still some weirdness + with some files. + +2000-03-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/lossy_comp_test.c + Added option to test PCM WAV files (sanity check). + Fixed bug in sf_seek() tests. + +2000-02-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c src/wav.c + Minor changes to allow writing of GSM 6.10 WAV files. + +2000-02-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.in Makefile.am src/Makefile.am + Finally got around to figuring out how to build a single library from + multiple source directories. + Reading GSM 6.10 files now seems to work. + +2000-01-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c + Added more error reporting in read_fmt_chunk(). + +1999-12-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sfinfo.c + Modified program to accept multiple filenames from the command line. + +1999-11-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav_ima_adpcm.c + Moved code around in preparation to adding ability to read/write IMA ADPCM + encoded AIFF files. + +1999-11-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.c + Fixed put_int() and put_short() macros used by _psf_hprintf() which were + causing seg. faults on Sparc Solaris. + +1999-11-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.c + Added string.h to includes. Thanks to Sigbjxrn Skjfret. + + * src/svx.c + Fixed __svx_close() function to ensure FORM and BODY chunks are correctly + set. + +1999-10-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/au.c + Fixed handling of incorrect size field in AU header on read. Thanks to + Christoph Lauer for finding this problem. + +1999-09-28 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c + Fixed a bug with incorrect SSND chunk length being written. This also lead + to finding an minor error in AIFF header parsing. Thanks to Dan Timis for + pointing this out. + +1999-09-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/paf.c + Fixed a bug with reading and writing 24 bit stereo PAF files. This problem + came to light when implementing tests for the new functions which operate + in terms of frames rather than items. + +1999-09-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Modified file type detection to use first 12 bytes of file rather than + file name extension. Required this because NIST files use the same + filename extension as Microsoft WAV files. + + * src/sndfile.c src/sndfile.h + Added short, int and double read/write functions which work in frames + rather than items. This was originally suggested by Maurizio Umberto + Puxeddu. + +1999-09-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/svx.c + Finished off implementation of write using __psf_hprintf(). + +1999-09-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/common.h + Added a buffer to SF_PRIVATE for writing the header. This is required + to make generating headers for IFF/SVX files easier as well as making + it easier to do re-write the headers which will be required when + sf_rewrite_header() is implemented. + + * src/common.c + Implemented __psf_hprintf() function. This is an internal function + which is documented briefly just above the code. + +1999-09-05 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Fixed a bug in sf_write_raw() where it was returning incorrect values + (thanks to Richard Dobson for finding this one). Must put in a test + routine for sf_read_raw and sf_write_raw. + + * src/aiff.c + Fixed default FORMsize in __aiff_open_write (). + + * src/sndfile.c + Added copy of filename to internal data structure. IFF/SVX files + contain a NAME header chunk. Both sf_open_read() and sf_open_write() + copy the file name (less the leading path information) to the + filename field. + + * src/svx.c + Started implementing writing of files. + +1999-08-04 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/svx.c + New file for reading/writing 8SVX and 16SVX files. + + * src/sndfile.[ch] src/common.h + Changes for SVX files. + + * src/aiff.c + Fixed header parsing when unknown chunk is found. + +1999-08-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/paf.c + New file for reading/writing Ensoniq PARIS audio file format. + + * src/sndfile.[ch] src/common.h + Changes for PAF files. + + * src/sndfile.[ch] + Added stuff for sf_get_lib_version() function. + + +1999-07-31 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.h MacOS/config.h + Fixed minor MacOS configuration issues. + +1999-07-30 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * MacOS/ + Added a new directory for the MacOS config.h file and the + readme file. + + * src/aiff.c + Fixed calculation of datalength when reading SSND chunk. Thanks to + Sigbjørn Skjæret for pointing out this error. + +1999-07-29 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c src/sndfile.h src/raw.c + Further fixing of #includes for MacOS. + +1999-07-25 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c src/aiff.c + Added call to ferror () in main header parsing loop of __XXX_open_read + functions. This should fix problems on platforms (MacOS, AmigaOS) where + fseek()ing or fread()ing beyond the end of the file puts the FILE* + stream in an error state until clearerr() is called. + + * tests/write_read_test.c + Added tests for RAW header-less PCM files. + + * src/common.h + Moved definition of struct tribyte to pcm.c which is the only place + which needs it. + + * src/pcm.c + Modified all code which assumed sizeof (struct tribyte) == 3. This code + did not work on MacOS. Thanks to Ben "Jacobs" for pointing this out. + + * src/au.c + Removed <sys/stat.h> from list of #includes (not being used). + + * src/sndfile.c + Added MacOS specific #ifdef to replace <sys/stat.h>. + + * src/sndfile.h + Added MacOS specific #ifdef to replace <sys/stat.h>. + + * src/sndfile.h + Added MacOS specific typedef for off_t. + + * MacOS-readme.txt + New file with instructions for building libsndfile under MacOS. Thanks + to Ben "Jacobs" for supplying these instructions. + +1999-07-24 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.in + Removed sndfile.h from generated file list as there were no longer + any autoconf substitutions being made. + + * src/raw.c + New file for handling raw header-less PCM files. In order to open these + for read, the user must specify format, pcmbitwidth and channels in the + SF_INFO struct when calling sf_open_read (). + + * src/sndfile.c + Added support for raw header-less PCM files. + +1999-07-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * examples/sfinfo.c + Removed options so the sfinfo program always prints out all the information. + +1999-07-19 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/alaw.c + New file for A-law encoding (similar to u-law). + + * tests/alaw_test.c + New test program to test the A-law encode/decode lookup tables. + + * tests/lossy_comp_test.c + Added tests for a-law encoded WAV, AU and AULE files. + +1999-07-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c src/au.c + Removed second "#include <unistd.h>". Thanks to Ben "Jacobs" for pointing + this out. + +1999-07-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/ulaw_test.c + New test program to test the u-law encode/decode lookup tables. + +1999-07-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.h + Made corrections to comments on the return values from sf_seek (). + + * src/sndfile.c + Fixed boundary condition checking bug and accounting bug in sf_read_raw (). + +1999-07-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/au.c src/ulaw.c + Finished implementation of u-law encoded AU files. + + * src/wav.c + Implemented reading and writing of u-law encoded WAV files. + + * tests/ + Changed name of adpcm_test.c to lossy_comp_test.c. This test program + will now be used to test Ulaw and Alaw encoding as well as APDCM. + Added tests for Ulaw encoded WAV files. + +1999-07-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/adpcm_test.c + Initialised amp variable in gen_signal() to remove compiler warning. + +1999-07-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c + In __aiff_open_read () prevented fseek()ing beyond end of file which + was causing trouble on MacOS with the MetroWerks compiler. Thanks to + Ben "Jacobs" for pointing this out. + + *src/wav.c + Fixed as above in __wav_open_read (). + +1999-07-01 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav_ms_adpcm.c + Implemented MS ADPCM encoding. Code cleanup of decoder. + + * tests/adpcm_test.c + Added tests for MS ADPCM WAV files. + + * src/wav_ima_adpcm.c + Fixed incorrect parameter in call to srate2blocksize () from + __ima_writer_init (). + +1999-06-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/read_seek_test.c + Added test for 8 bit AIFF files. + +1999-06-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/write_read_test.c + Removed test for IMA ADPCM WAV files which is now done in adpcm_test.c + + * configure.in + Added -Wconversion to CFLAGS. + + * src/*.c tests/*.c examples/*.c + Fixed all warnings resulting from use of -Wconversion. + +1999-06-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c + Added fact chunk handling on read and write for all non WAVE_FORMAT_PCM + WAV files. + + * src/wav_ima.c + Changed block alignment to be dependant on sample rate. This should make + WAV files created with libsndfile compatible with the MS Windows media + players. + + * tests/adpcm_test.c + Reimplemented adpcm_test_short and implemented adpcm_test_int and + adpcm_test_double. + Now have full testing of IMA ADPCM WAV file read, write and seek. + +1999-06-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav_float.c + Fixed function prototype for x86f2d_array () which was causing ocassional + seg. faults on Sparc Solaris machines. + +1999-06-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c + Fixed bug in __aiff_close where the length fields in the header were + not being correctly calculated before writing. + + * tests/write_read_test.c + Modified to detect the above bug in WAV, AIFF and AU files. + +1999-06-12 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * Win32/* + Added a contribution from Albert Faber to allow libsndfile to compile + under Win32 systems. libsndfile will now be used as part of LAME the + the MPEG 1 Layer 3 encoder (http://internet.roadrunner.com/~mt/mp3/). + +1999-06-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.in + Changed to reflect previous changes. + + * src/wav_ima_adpcm.c + Fixed incorrect calculation of bytespersec header field (IMA ADPCM only). + + Fixed bug when writing from int or double data to IMA ADPCM file. Will need + to write test code for this. + + Fixed bug in __ima_write () whereby the length of the current block was + calculated incorrectly. Thanks to Jongcheon Park for pointing this out. + +1999-03-27 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/*.c + Changed all read/write/lseek function calls to fread/fwrite/ + fseek/ftell and added error checking of return values from + fread and fwrite in critical areas of the code. + + * src/au.c + Fixed incorrect datasize element in AU header on write. + + * tests/error_test.c + Add new test to check all error values have an associated error + string. This will avoid embarrassing real world core dumps. + +1999-03-23 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c src/aiff.c + Added handling for unknown chunk markers in the file. + +1999-03-22 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Filled in missing error strings in SndfileErrors array. Missing entries + can cause core dumps when calling sf_error-str (). Thanks to Sam + <mrsam at-sign geocities.com> for finding this problem. + +1999-03-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav_ima_adpcm.c + Work on wav_ms_adpcm.c uncovered a bug in __ima_read () when reading + stereo files. Caused by not adjusting offset into buffer of decoded + samples for 2 channels. A similar bug existed in __ima_write (). + Need a test for stereo ADPCM files. + + * src/wav_ms_adpcm.c + Decoder working correctly. + +1999-03-18 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * configure.in Makefile.am + Added --enable-justsrc configuration variable sent by Sam + <mrsam at-sign geocities.com>. + + * src/wav_ima_adpcm.c + Fixed bug when reading beyond end of data section due to not + checking pima->blockcount. + This uncovered __ima_seek () bug due to pima->blockcount being set + before calling __ima_init_block (). + +1999-03-17 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c + Started implementing MS ADPCM decoder. + If file is WAVE_FORMAT_ADPCM and length of data chunk is odd, this + encoder seems to add an extra byte. Why not just give an even data + length? + +1999-03-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c + Split code out of wav.c to create wav_float.c and wav_ima_adpcm.c. + This will make it easier to add and debug other kinds of WAV files + in future. + +1999-03-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/ + Added adpcm_test.c which implements test functions for + IMA ADPCM reading/writing/seeking etc. + + * src/wav.c + Fixed many bugs in IMA ADPCM encoder and decoder. + +1999-03-11 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c + Finished implementing IMA ADPCM encoder and decoder (what a bitch!). + +1999-03-03 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/wav.c + Started implementing IMA ADPCM decoder. + +1999-03-02 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/sndfile.c + Fixed bug where the sf_read_XXX functions were returning a + incorrect read count when reading past end of file. + Fixed bug in sf_seek () when seeking backwards from end of file. + + * tests/read_seek_test.c + Added multiple read test to short_test(), int_test () and + double_test (). + Added extra chunk to all test WAV files to test that reading + stops at end of 'data' chunk. + +1999-02-21 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/write_read_test.c + Added tests for little DEC endian AU files. + + * src/au.c + Add handling for DEC format little endian AU files. + +1999-02-20 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c src/au.c src/wav.c + Add __psf_sprintf calls during header parsing. + + * src/sndfile.c src/common.c + Implement sf_header_info (sndfile.c) function and __psf_sprintf (common.c). + + * tests/write_read_test.c + Added tests for 8 bit PCM files (WAV, AIFF and AU). + + * src/au.c src/aiff.c + Add handling of 8 bit PCM data format. + + * src/aiff.c + On write, set blocksize in SSND chunk to zero like everybody else. + +1999-02-16 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/pcm.c: + Fixed bug in let2s_array (cptr was not being initialised). + + * src/sndfile.c: + Fixed bug in sf_read_raw and sf_write_raw. sf_seek should + now work when using these functions. + +1999-02-15 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * tests/write_read_test.c: + Force test_buffer array to be double aligned. Sparc Solaris + requires this. + +1999-02-14 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/pcm.c: + Fixed a bug which was causing errors in the reading + and writing of 24 bit PCM files. + + * doc/api.html + Finished of preliminary documentaion. + +1999-02-13 Erik de Castro Lopo <erikd AT mega-nerd DOT com> + + * src/aiff.c: + Changed reading of 'COMM' chunk to avoid reading an int + which overlaps an int (4 byte) boundary. + diff --git a/doc/FAQ.html b/doc/FAQ.html new file mode 100644 index 0000000..ce0164a --- /dev/null +++ b/doc/FAQ.html @@ -0,0 +1,849 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> + +<HEAD> + <TITLE> + libsndfile : Frequently Asked Questions. + </TITLE> + <META NAME="Author" CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)"> + <META NAME="Description" CONTENT="The libsndfile FAQ."> + <META NAME="Keywords" CONTENT="WAV AIFF AU libsndfile sound audio dsp Linux"> + <LINK REL="stylesheet" HREF="libsndfile.css" TYPE="text/css" MEDIA="all"> + <LINK REL="stylesheet" HREF="print.css" TYPE="text/css" MEDIA="print"> +</HEAD> + +<BODY> + +<H1><B>libsndfile : Frequently Asked Questions.</B></H1> +<P> +<A HREF="#Q001">Q1 : Do you plan to support XYZ codec in libsndfile?</A><BR/> +<A HREF="#Q002">Q2 : In version 0 the SF_INFO struct had a pcmbitwidth field + but version 1 does not. Why?</A><BR/> +<A HREF="#Q003">Q3 : Compiling is really slow on MacOS X. Why?</A><BR/> +<A HREF="#Q004">Q4 : When trying to compile libsndfile on Solaris I get a "bad + substitution" error during linking. What can I do to fix this?</A><BR/> +<A HREF="#Q005">Q5 : Why doesn't libsndfile do interleaving/de-interleaving?</A><BR/> +<A HREF="#Q006">Q6 : What's the best format for storing temporary files?</A><BR/> +<A HREF="#Q007">Q7 : On Linux/Unix/MacOS X, what's the best way of detecting the + presence of libsndfile?</A><BR/> +<A HREF="#Q008">Q8 : But I just want a simple Makefile! What do I do?</A><BR/> +<A HREF="#Q009">Q9 : How about adding the ability to write/read sound files to/from + memory buffers?</A><BR/> +<A HREF="#Q010">Q10 : Reading a 16 bit PCM file as normalised floats and then + writing them back changes some sample values. Why?</A><BR/> +<A HREF="#Q011">Q11 : I'm having problems with u-law encoded WAV files generated by + libsndfile in Winamp. Why?</A><BR/> +<A HREF="#Q012">Q12 : I'm looking at sf_read*. What are items? What are frames?</A><BR/> +<A HREF="#Q013">Q13 : Why can't libsndfile open this Sound Designer II (SD2) + file?</A><BR/> +<A HREF="#Q014">Q14 : I'd like to statically link libsndfile to my closed source + application. Can I buy a license so that this is possible?</A><BR/> +<A HREF="#Q015">Q15 : My program is crashing during a call to a function in libsndfile. + Is this a bug in libsndfile?</A><BR/> +<A HREF="#Q016">Q16 : Will you accept a fix for compiling libsndfile with compiler X? + </A><BR/> +<A HREF="#Q017">Q17 : Can libsndfile read/write files from/to UNIX pipes? + </A><BR/> +<A HREF="#Q018">Q18 : Is it possible to build a Universal Binary on Mac OS X? + </A><BR/> +<A HREF="#Q019">Q19 : I have project files for Visual Studio / XCode / Whatever. Why + don't you distribute them with libsndfile? + </A><BR/> +<A HREF="#Q020">Q20 : Why doesn't libsndfile support MP3? Lots of other Open Source + projects support it! + </A><BR/> +<A HREF="#Q021">Q21 : How do I use libsndfile in a closed source or commercial program + and comply with the license? + </A><BR/> +<A HREF="#Q022">Q22 : What versions of windows does libsndfile work on? + </A><BR/> +<A HREF="#Q023">Q23 : I'm cross compiling libsndfile for another platform. How can I + run the test suite? + </A><BR/> +<HR> + +<!-- ========================================================================= --> +<A NAME="Q001"></A> +<H2><BR/><B>Q1 : Do you plan to support XYZ codec in libsndfile?</B></H2> +<P> +If source code for XYZ codec is available under a suitable license (LGPL, BSD, +MIT etc) then yes, I'd like to add it. +</P> +<P> +If suitable documentation is available on how to decode and encode the format +then maybe, depending on how much work is involved. +</P> +<P> +If XYZ is some proprietary codec where no source code or documentation is +available then no. +</P> +<P> +So if you want support for XYZ codec, first find existing source code or +documentation. +If you can't find either then the answer is no. +</P> +<!-- ========================================================================= --> +<A NAME="Q002"></A> +<H2><BR/><B>Q2 : In version 0 the SF_INFO struct had a pcmbitwidth field + but version 1 does not. Why?</B></H2> +<P> + This was dropped for a number of reasons: +</P> +<UL> + <LI> pcmbitwidth makes little sense on compressed or floating point formats + <LI> with the new API you really don't need to know it +</UL> +<P> +As documented + <A HREF="http://www.mega-nerd.com/libsndfile/api.html#note1">here</A> +there is now a well defined behaviour which ensures that no matter what the +bit width of the source file, the scaling always does something sensible. +This makes it safe to read 8, 16, 24 and 32 bit PCM files using sf_read_short() +and always have the optimal behaviour. +</P> + +<!-- ========================================================================= --> +<A NAME="Q003"></A> +<H2><BR/><B>Q3 : Compiling is really slow on MacOS X. Why?</B></H2> +<P> +When you configure and compile libsndfile, it uses the /bin/sh shell for a number +of tasks (ie configure script and libtool). +Older versions of OS X (10.2?) shipped a really crappy Bourne shell as /bin/sh +which resulted in <b>really</b> slow compiles. +Newer version of OS X ship GNU Bash as /bin/sh and this answer doesn't apply in that +case. +</P> +<P> +To fix this I suggest that you install the GNU Bash shell, rename /bin/sh to +/bin/sh.old and make a symlink from /bin/sh to the bash shell. +Bash is designed to behave as a Bourne shell when is is called as /bin/sh. +</P> +<P> +When I did this on my iBook running MacOS X, compile times dropped from 13 minutes +to 3 minutes. +</P> + +<!-- ========================================================================= --> +<A NAME="Q004"></A> +<H2><BR/><B>Q4 : When trying to compile libsndfile on Solaris I get a "bad + substitution" error on linking. Why?</B></H2> +<P> +It seems that the Solaris Bourne shell disagrees with GNU libtool. +</P> +<P> +To fix this I suggest that you install the GNU Bash shell, rename /bin/sh to +/bin/sh.old and make a symlink from /bin/sh to the bash shell. +Bash is designed to behave as a Bourne shell when is is called as /bin/sh. +</P> + +<!-- ========================================================================= --> +<A NAME="Q005"></A> +<H2><BR/><B>Q5 : Why doesn't libsndfile do interleaving/de-interleaving?</B></H2> +<P> +This problem is bigger than it may seem at first. +</P> +<P> +For a stereo file, it is a pretty safe bet that a simple interleaving/de-interleaving +could satisfy most users. +However, for files with more than 2 channels this is unlikely to be the case. +If the user has a 4 channel file and want to play that file on a stereo output +sound card they either want the first 2 channels or they want some mixed combination +of the 4 channels. +</P> +<P> +When you add more channels, the combinations grow exponentially and it becomes +increasingly difficult to cover even a sensible subset of the possible combinations. +On top of that, coding any one style of interleaver/de-interleaver is trivial, while +coding one that can cover all combinations is far from trivial. +This means that this feature will not be added any time soon. +</P> + +<!-- ========================================================================= --> +<A NAME="Q006"></A> +<H2><BR/><B>Q6 : What's the best format for storing temporary files?</B></H2> + +<P> +When you want to store temporary data there are a number of requirements; +</P> +<UL> + <LI> A simple, easy to parse header. + <LI> The format must provide the fastest possible read and write rates (ie + avoid conversions and encoding/decoding). + <LI> The file format must be reasonably common and playable by most players. + <LI> Able to store data in either endian-ness. +</UL> +<P> +The format which best meets these requirements is AU, which allows data to be +stored in any one of short, int, float and double (among others) formats. +</P> +<P> +For instance, if an application uses float data internally, its temporary files +should use a format of (SF_ENDIAN_CPU | SF_FORMAT_AU | SF_FORMAT_FLOAT) which +will store big endian float data in big endian CPUs and little endian float data +on little endian CPUs. +Reading and writing this format will not require any conversions or byte swapping +regardless of the host CPU. +</P> + +<!-- ========================================================================= --> + +<A NAME="Q007"></A> +<H2><BR/><B>Q7 : On Linux/Unix/MaxOS X, what's the best way of detecting the presence + of libsndfile using autoconf?</B></H2> + +<P> +libsndfile uses the pkg-config (man pkg-config) method of registering itself with the +host system. +The best way of detecting its presence is using something like this in configure.ac +(or configure.in): +</P> +<PRE> + PKG_CHECK_MODULES(SNDFILE, sndfile >= 1.0.2, ac_cv_sndfile=1, ac_cv_sndfile=0) + + AC_DEFINE_UNQUOTED([HAVE_SNDFILE],${ac_cv_sndfile}, + [Set to 1 if you have libsndfile.]) + + AC_SUBST(SNDFILE_CFLAGS) + AC_SUBST(SNDFILE_LIBS) +</PRE> +<P> +This will automatically set the <B>SNDFILE_CFLAGS</B> and <B>SNDFILE_LIBS</B> +variables which can be used in Makefile.am like this: +</P> +<PRE> + SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ + SNDFILE_LIBS = @SNDFILE_LIBS@ +</PRE> +<P> +If you install libsndfile from source, you will probably need to set the +<B>PKG_CONFIG_PATH</B> environment variable as suggested at the end of the +libsndfile configure process. For instance on my system I get this: +</P> +<PRE> + -=-=-=-=-=-=-=-=-=-= Configuration Complete =-=-=-=-=-=-=-=-=-=- + + Configuration summary : + + Version : ..................... 1.0.5 + Experimental code : ........... no + + Tools : + + Compiler is GCC : ............. yes + GCC major version : ........... 3 + + Installation directories : + + Library directory : ........... /usr/local/lib + Program directory : ........... /usr/local/bin + Pkgconfig directory : ......... /usr/local/lib/pkgconfig + + Compiling some other packages against libsndfile may require + the addition of "/usr/local/lib/pkgconfig" to the + PKG_CONFIG_PATH environment variable. +</PRE> + +<!-- ========================================================================= --> + +<A NAME="Q008"></A> +<H2><BR/><B>Q8 : But I just want a simple Makefile! What do I do?</B></H2> + +<P> +The <B>pkg-config</B> program makes finding the correct compiler flag values and +library location far easier. +During the installation of libsndfile, a file named <B>sndfile.pc</B> is installed +in the directory <B>${libdir}/pkgconfig</B> (ie if libsndfile is installed in +<B>/usr/local/lib</B>, <B>sndfile.pc</B> will be installed in +<B>/usr/local/lib/pkgconfig/</B>). +</P> +<P> +In order for pkg-config to find sndfile.pc it may be necessary to point the +environment variable <B>PKG_CONFIG_PATH</B> in the right direction. +</P> +<PRE> + export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig +</PRE> + +<P> +Then, to compile a C file into an object file, the command would be: +</P> +<PRE> + gcc `pkg-config --cflags sndfile` -c somefile.c +</PRE> +<P> +and to link a number of objects into an executable that links against libsndfile, +the command would be: +</P> +<PRE> + gcc `pkg-config --libs sndfile` obj1.o obj2.o -o program +</PRE> + +<!-- ========================================================================= --> + +<A NAME="Q009"></A> +<H2><BR/><B>Q9 : How about adding the ability to write/read sound files to/from + memory buffers?</B></H2> + +<P> +This has been added for version 1.0.13. +</P> + +<!-- ========================================================================= --> + +<A NAME="Q010"></A> +<H2><BR/><B>Q10 : Reading a 16 bit PCM file as normalised floats and then + writing them back changes some sample values. Why?</B></H2> + +<P> +This is caused by the fact that the conversion from 16 bit short to float is +done by dividing by 32768 (0x8000 in hexadecimal) while the conversion from +float to 16 bit short is done by multiplying by 32767 (0x7FFF in hex). +So for instance, a value in a 16 bit PCM file of 20000 gets read as a floating +point number of 0.6103515625 (20000.0 / 0x8000). +Converting that back to a 16 bit short results in a value of 19999.3896484375 +(0.6103515625 * 0x7FFF) which then gets rounded down to 19999. +</P> +<P> +You will notice that for this particular case, the error is 1 in 20000 or +0.005%. +Interestingly, for values of less than 16369, dividing by 0x8000 followed +by multiplying by 0x7FFF and then rounding the result, gives back the +original value. +It turns out that as long as the host operating system supplies the 1999 ISO +C Standard functions <B>lrintf</B> and <B>lrint</B> (or a replacement has +been supplied) then the maximum possible error is 1 in 16369 or about 0.006%. +</P> +<P> +Regardless of the size of the error, the reason why this is done is rather +subtle. +</P> +<P> +In a file containing 16 bit PCM samples, the values are restricted to the range +[-32768, 32767] while we want floating point values in the range [-1.0, 1.0]. +The only way to do this conversion is to do a floating point division by a value +of 0x8000. +Converting the other way, the only way to ensure that floating point values in +the range [-1.0, 1.0] are within the valid range allowed by a 16 bit short is +to multiply by 0x7FFF. +</P> +<P> +Some people would say that this is a severe short-coming of libsndfile. +I would counter that anybody who is constantly converting back and forth +between 16 bit shorts and normalised floats is going to suffer other losses +in audio quality that they should also be concerned about. +</P> +<P> +Since this problem only occurs when converting between integer data on disk and +normalized floats in the application, it can be avoided by using something +other than normalized floats in the application. +Alternatives to normalized floats are the <b>short</b> and <b>int</b> data +types (ie using sf_read_short or sf_read_int) or using un-normalized floats +(see + <a href="http://www.mega-nerd.com/libsndfile/command.html#SFC_SET_NORM_FLOAT"> + SFC_SET_NORM_FLOAT</a>). +</P> +<P> +Another way to deal with this problem is to consider 16 bit short data as a +final destination format only, not as an intermediate storage format. +All intermediate data (ie which is going to be processed further) should be +stored in floating point format which is supported by all of the most common +file formats. +If floating point files are considered too large (2 times the size of a 16 bit +PCM file), it would also be possible to use 24 bit PCM as an intermediate +storage format (and which is also supported by most common file types). +</P> + +<!-- ========================================================================= --> + +<A NAME="Q011"></A> +<H2><BR/><B>Q11 : I'm having problems with u-law encoded WAV files generated by + libsndfile in Winamp. Why? +</B></H2> + +<P> +This is actually a Winamp problem. +The official Microsoft spec suggests that the 'fmt ' chunk should be 18 bytes. +Unfortunately at least one of Microsoft's own applications (Sound Recorder on +Win98 I believe) did not accept 18 bytes 'fmt ' chunks. +</P> +<P> +Michael Lee did some experimenting and found that: +</P> +<PRE> + I have checked that Windows Media Player 9, QuickTime Player 6.4, + RealOne Player 2.0 and GoldWave 5.06 can all play u-law files with + 16-byte or 18-byte 'fmt ' chunk. Only Winamp (2.91) and foobar2000 + are unable to play u-law files with 16-byte 'fmt ' chunk. +</PRE> + +<P> +Even this is a very small sampling of all the players out there. +For that reason it is probably not a good idea to change this now because there +is the risk of breaking something that currently works. +</P> + +<!-- ========================================================================= --> + +<A NAME="Q012"></A> +<H2><BR/><B>Q12 : I'm looking at sf_read*. What are items? What are frames? +</B></H2> + +<P> +An <tt>item</tt>tt> is a single sample of the data type you are reading; ie a +single <tt>short</tt> value for <tt>sf_read_short</tt> or a single <tt>float</tt> +for <tt>sf_read_float</tt>. +</P> + +For a sound file with only one channel, a frame is the same as a item (ie a +single sample) while for multi channel sound files, a single frame contains a +single item for each channel. +</P> + +<P> +Here are two simple, correct examples, both of which are assumed to be working +on a stereo file, first using items: +</P> + +<PRE> + #define CHANNELS 2 + short data [CHANNELS * 100] ; + sf_count items_read = sf_read_short (file, data, 200) ; + assert (items_read == 200) ; +</PRE> + +<P> +and now readng the exact same amount of data using frames: +</P> + +<PRE> + #define CHANNELS 2 + short data [CHANNELS * 100] ; + sf_count frames_read = sf_readf_short (file, data, 100) ; + assert (frames_read == 100) ; +</PRE> + +<!-- ========================================================================= --> + +<A NAME="Q013"></A> +<H2><BR/><B>Q13 : Why can't libsndfile open this Sound Designer II (SD2) file? +</B></H2> + +<P> +This is somewhat complicated. +First some background. +</P> + +<P> +SD2 files are native to the Apple Macintosh platform and use features of +the Mac filesystem (file resource forks) to store the file's sample rate, +number of channels, sample width and more. +When you look at a file and its resource fork on Mac OS X it looks like +this: +</P> + +<PRE> + -rw-r--r-- 1 erikd erikd 46512 Oct 18 22:57 file.sd2 + -rw-r--r-- 1 erikd erikd 538 Oct 18 22:57 file.sd2/rsrc +</PRE> + +<P> +Notice how the file itself looks like a directory containing a single file +named <B>rsrc</B>. +When libsndfile is compiled for MacOS X, it should open (for write and read) +SD2 file with resource forks like this without any problems. +It will also handle files with the resource fork in a separate file as +described below. +</P> + +<P> +When SD2 files are moved to other platforms, the resource fork of the file +can sometimes be dropped altogether. +All that remains is the raw audio data and no information about the number +of channels, sample rate or bit width which makes it a little difficult for +libsndfile to open the file. +</P> + +<P> +However, it is possible to safely move an SD2 file to a Linux or Windows +machine. +For instance, when an SD2 file is copied from inside MacOS X to a windows +shared directory or a Samba share (ie Linux), MacOS X is clever enough to +store the resource fork of the file in a separate hidden file in the +same directory like this: +</P> +<PRE> + -rw-r--r-- 1 erikd erikd 538 Oct 18 22:57 ._file.sd2 + -rw-r--r-- 1 erikd erikd 46512 Oct 18 22:57 file.sd2 +</PRE> + +<P> +Regardless of what platform it is running on, when libsndfile is asked to +open a file named <B>"foo"</B> and it can't recognize the file type from +the data in the file, it will attempt to open the resource fork and if +that fails, it then tries to open a file named <B>"._foo"</B> to see if +the file has a valid resource fork. +This is the same regardless of whether the file is being opened for read +or write. +</P> + +<P> +In short, libsndfile should open SD2 files with a valid resource fork on +all of the platforms that libsndfile supports. +If a file has lost its resource fork, the only option is the open the file +using the SF_FORMAT_RAW option and guessing its sample rate, channel count +and bit width. +</P> + +<P> +Occasionally, when SD2 files are moved to other systems, the file is + <A HREF="http://www.macdisk.com/binhexen.php3">BinHexed</A> +which wraps the resource fork and the data fork together. +For these files, it would be possible to write a BinHex parser but +there is not a lot to gain considering how rare these BinHexed SD2 +files are. +</P> + +<!-- ========================================================================= --> +<A NAME="Q014"></A> +<H2><BR/><B>Q14 : I'd like to statically link libsndfile to my closed source + application. Can I buy a license so that this is possible? +</B></H2> + +<P> +Unfortunately no. +libsndfile contains code written by other people who have agreed that their +code be used under the GNU LGPL but no more. +Even if they were to agree, there would be significant difficulties in +dividing up the payments fairly. +</P> + +<P> +The <B>only</B> way you can legally use libsndfile as a statically linked +library is if your application is released under the GNU GPL or LGPL. +</P> + +<!-- ========================================================================= --> +<A NAME="Q015"></A> +<H2><BR/><B>Q15 : My program is crashing during a call to a function in libsndfile. + Is this a bug in libsndfile? +</B></H2> + +<P> +libsndfile is being used by large numbers of people all over the world +without any problems like this. That means that it is much more likely +that your code has a bug than libsndfile. However, it is still possible +that there is a bug in libsndfile. +</P> +<P> +To figure out whether it is your code or libsndfile you should do the +following: +</P> + <UL> + <LI>Make sure you are compiling your code with warnings switched on and + that you fix as many warnings as possible. + With the GNU compiler (gcc) I would recommend at least + <B>-W -Wall -Werror</B> which will force you to fix all warnings + before you can run the code. + <LI>Try using a memory debugger. + <A HREF="http://valgrind.kde.org/">Valgrind</A> on x86 Linux is excellent. + <A HREF="http://www.ibm.com/software/awdtools/purify/">Purify</A> also + has a good reputation. + <LI>If the code is clean after the above two steps and you still get + a crash in libsndfile, then send me a small snippet of code (no + more than 30-40 lines) which includes the call to sf_open() and + also shows how all variables passed to/returned from sf_open() + are defined. + </UL> + +<!-- ========================================================================= --> +<A NAME="Q016"></A> +<H2><BR/><B>Q16 : Will you accept a fix for compiling libsndfile with compiler X? +</B></H2> + +<P> +If compiler X is a C++ compiler then no. +C and C++ are different enough to make writing code that compiles as valid C +and valid C++ too difficult. +I would rather spend my time fixing bugs and adding features. +</P> + +<P> +If compiler X is a C compiler then I will do what I can as long as that does +not hamper the correctness, portability and maintainability of the existing +code. +It should be noted however that libsndfile uses features specified by the 1999 +ISO C Standard. +This can make compiling libsndfile with some older compilers difficult. +</P> + +<!-- ========================================================================= --> +<A NAME="Q017"></A> +<H2><BR/><B>Q17 : Can libsndfile read/write files from/to UNIX pipes? +</B></H2> + +<P> +Yes, libsndfile can read files from pipes. +Unfortunately, the write case is much more complicated. +</P> + +<P> +File formats like AIFF and WAV have information at the start of the file (the +file header) which states the length of the file, the number of sample frames +etc. +This information must be filled in correctly when the file header is written, +but this information is not reliably known until the file is closed. +This means that libsndfile cannot write AIFF, WAV and many other file types +to a pipe. +</P> + +<P> +However, there is at least one file format (AU) which is specifically designed +to be written to a pipe. +Like AIFF and WAV, AU has a header with a sample frames field, but it is +specifically allowable to set that frames field to 0x7FFFFFFF if the file +length is not known when the header is written. +The AU file format can also hold data in many of the standard formats (ie +SF_FORMAT_PCM_16, SF_FORMAT_PCM_24, SF_FORMAT_FLOAT etc) as well as allowing +data in both big and little endian format. +</P> + +<P> +See also <A HREF="#Q006">FAQ Q6</A>. +</P> + +<!-- ========================================================================= --> +<A NAME="Q018"></A> +<H2><BR/><B>Q18 : Is it possible to build a Universal Binary on Mac OS X? +</B></H2> + +<P> +Yes, but you must do two separate configure/build/test runs; one on PowerPC +and one on Intel. +It is then possible to merge the binaries into a single universal binary using +one of the programs in the Apple tool chain. +</P> + +<P> +It is <b>not</b> possible to build a working universal binary via a single +compile/build run on a single CPU. +</P> + +<P> +The problem is that the libsndfile build process detects features of the CPU its +being built for during the configure process and when building a universal binary, +configure is only run once and that data is then used for both CPUs. +That configure data will be wrong for one of those CPUs. +You will still be able to compile libsndfile, and the test suite will pass on +the machine you compiled it on. +However, if you take the universal binary test suite programs compiled on one +CPU and run them on the other, the test suite will fail. +</P> + +<P> +Part of the problem is the the CPU endian-ness is detected at configure time. +Yes, I know the Apple compiler defines one of the macros __LITTLE_ENDIAN__ +and __BIG_ENDIAN__, but those macros are not part of the 1999 ISO C Standard +and they are not portable. +</P> + +<P> +Endian issues are not the only reason why the cross compiled binary will fail. +The configure script also detects other CPU specific idiosyncrasies to provide +more optimized code. +</P> + +<P> +Finally, the real show stopper problem with universal binaries is the problem +with the test suite. +libsndfile contains a huge, comprehensive test suite. +When you compile a universal binary and run the test suite, you only test the +native compile. +The cross compiled binary (the one with the much higher chance of having +problems) cannot be tested. +</P> + +<P> +Now, if you have read this far you're probably thinking there must be a way +to fix this and there probably is. +The problem is that its a hell of a lot of work and would require significant +changes to the configure process, the internal code and the test suite. +In addition, these changes must not break compilation on any of the platforms +libsndfile is currently working on. +</p> + + +<!-- ========================================================================= --> +<A NAME="Q019"></A> +<H2><BR/><B>Q19 : I have project files for Visual Studio / XCode / Whatever. Why + don't you distribute them with libsndfile? +</B></H2> + +<P> +There's a very good reason for this. +I will only distribute things that I actually have an ability to test and +maintain. +Project files for a bunch of different compilers and Integrated Development +Environments are simply too difficult to maintain. +</P> + +<P> +The problem is that every time I add a new file to libsndfile or rename an +existing file I would have to modify all the project files and then test that +libsndfile still built with all the different compilers. +</P> + +<P> +Maintaining these project files is also rather difficult if I don't have access +to the required compiler/IDE. +If I just edit the project files without testing them I will almost certainly +get it wrong. +If I release a version of libsndfile with broken project files, I'll get a bunch +of emails from people complaining about it not building and have no way of +fixing or even testing it. +</P> + +<P> +I currently release sources that I personally test on Win32, Linux and +MacOS X (PowerPC) using the compiler I trust (GNU GCC). +Supporting one compiler on three (actually much more because GCC is available +almost everywhere) platforms is doable without too much pain. +I also release binaries for Win32 with instructions on how to use those +binaries with Visual Studio. +As a guy who is mainly interested in Linux, I'm not to keen to jump through +a bunch of hoops to support compilers and operating systems I don't use. +</P> + +<P> +So, I hear you want to volunteer to maintain the project files for Some Crappy +Compiler 2007? +Well sorry, that won't work either. +I have had numerous people over the years offer to maintaining the project +files for Microsoft's Visual Studio. +Every single time that happened, they maintained it for a release or two and +then disappeared off the face of the earth. +Hence, I'm not willing to enter into an arrangement like that again. +</P> + +<!-- ========================================================================= --> +<A NAME="Q020"></A> +<H2><BR/><B>Q20 : Why doesn't libsndfile support MP3? Lots of other Open Source + projects support it! +</B></H2> + +<P> +MP3 is not supported for one very good reason; doing so requires the payment +of licensing fees. +As can be seen from + <a href="http://www.mp3licensing.com/royalty/software.html"> + mp3licensing.com</a> +the required royalty payments are not cheap. +</P> + +<p> +Yes, I know other libraries ignore the licensing requirements, but their legal +status is extremely dubious. +At any time, the body selling the licenses could go after the authors of those +libraries. +Some of those authors may be students and hence wouldn't be worth pursuing. +</P> + +<p> +However, libsndfile is released under the name of a company, Mega Nerd Pty Ltd; +a company which has income from from libsamplerate licensing, libsndfile based +consulting income and other unrelated consulting income. +Adding MP3 support to libsndfile could place that income would be under legal +threat. +</p> + +<p> +Fortunately, Ogg Vorbis exists as an alternative to MP3. +Support for Ogg Vorbis was added to libsndfile (mostly due to the efforts of +John ffitch of the Csound project) in version 1.0.18. +</p> + + +<!-- ========================================================================= --> +<A NAME="Q021"></A> +<H2><BR/><B>Q21 : How do I use libsndfile in a closed source or commercial program + and comply with the license? +</B></H2> + +<p> +Here is a checklist of things you need to do to make sure your use of libsndfile +in a closed source or commercial project complies with the license libsndfile is +released under, the GNU Lesser General Public License (LGPL): +</p> + +<ul> +<li>Make sure you are linking to libsndfile as a shared library (Linux and Unix + systems), Dynamic Link Library (Microsoft Windows) or dynlib (Mac OS X). + If you are using some other operating system that doesn't allow dynamically + linked libraries, you will not be able to use libsndfile unless you release + the source code to your program. +<li>In the licensing documentation for your program, add a statement that your + software depends on libsndfile and that libsndfile is released under the GNU + Lesser General Public License, either + <a href="http://www.gnu.org/licenses/lgpl-2.1.txt">version 2.1</a> + or optionally + <a href="http://www.gnu.org/licenses/lgpl.txt">version 3</a>. +<li>Include the text for both versions of the license, possibly as separate + files named libsndfile_lgpl_v2_1.txt and libsndfile_lgpl_v3.txt. +</ul> + +<!-- ========================================================================= --> +<A NAME="Q022"></A> +<H2><BR/><B>Q22 : What versions of Windows does libsndfile work on? +</B></H2> + +<p> +Currently the precompiled windows binaries are thoroughly tested on Windows XP. +As such, they should also work on Win2k and Windows Vista. +They may also work on earlier versions of Windows. +</p> + +<p> +Since version 0.1.18 I have also been releasing precompiled binaries for Win64, +the 64 bit version of Windows. +These binaries have received much less testing than the 32 bit versions, but +should work as expected. +I'd be very interested in receiving feedback on these binaries. +</p> + +<!-- ========================================================================= --> +<A NAME="Q023"></A> +<H2><BR/><B>Q23 : I'm cross compiling libsndfile for another platform. How can I + run the test suite? +</B></H2> + +<p> +</p> + +<p> +Since version 1.0.21 the top level Makefile has an extra make target, +'test-tarball'. +Building this target creates a tarball called called: +</p> + +<center><tt> +libsndfile-testsuite-${host_triplet}-${version}.tar.gz +</tt></center> + +<p> +in the top level directory. +This tarball can then be copied to the target platform. +Once untarred and test script <tt>test_wrapper.sh</tt> can be run from +the top level of the extracted tarball. +</p> + +<!-- ========================================================================= --> +<HR> +<P> + The libsndfile home page is here : + <A HREF="http://www.mega-nerd.com/libsndfile/"> + http://www.mega-nerd.com/libsndfile/</A>. +<BR/> +Version : 1.0.25 +</P> + +</BODY> +</HTML> diff --git a/doc/Makefile.am b/doc/Makefile.am new file mode 100644 index 0000000..40a04d9 --- /dev/null +++ b/doc/Makefile.am @@ -0,0 +1,10 @@ +## Process this file with automake to produce Makefile.in + +htmldir = $(htmldocdir) +html_DATA = index.html libsndfile.jpg libsndfile.css api.html command.html \ + bugs.html sndfile_info.html new_file_type.HOWTO pkgconfig.html \ + win32.html FAQ.html lists.html embedded_files.html octave.html \ + dither.html tutorial.html + +EXTRA_DIST = $(html_DATA) + diff --git a/doc/Makefile.in b/doc/Makefile.in new file mode 100644 index 0000000..1169ab1 --- /dev/null +++ b/doc/Makefile.in @@ -0,0 +1,485 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +target_triplet = @target@ +subdir = doc +DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/libsndfile.css.in AUTHORS ChangeLog NEWS +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/M4/add_cflags.m4 \ + $(top_srcdir)/M4/add_cxxflags.m4 $(top_srcdir)/M4/clip_mode.m4 \ + $(top_srcdir)/M4/endian.m4 $(top_srcdir)/M4/extra_largefile.m4 \ + $(top_srcdir)/M4/extra_pkg.m4 \ + $(top_srcdir)/M4/flexible_array.m4 \ + $(top_srcdir)/M4/gcc_version.m4 $(top_srcdir)/M4/libtool.m4 \ + $(top_srcdir)/M4/lrint.m4 $(top_srcdir)/M4/lrintf.m4 \ + $(top_srcdir)/M4/ltoptions.m4 $(top_srcdir)/M4/ltsugar.m4 \ + $(top_srcdir)/M4/ltversion.m4 $(top_srcdir)/M4/lt~obsolete.m4 \ + $(top_srcdir)/M4/mkoctfile_version.m4 \ + $(top_srcdir)/M4/octave.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = libsndfile.css +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(htmldir)" +DATA = $(html_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ACLOCAL_AMFLAGS = @ACLOCAL_AMFLAGS@ +ALSA_LIBS = @ALSA_LIBS@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CLEAN_VERSION = @CLEAN_VERSION@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CXX = @CXX@ +CXXCPP = @CXXCPP@ +CXXDEPMODE = @CXXDEPMODE@ +CXXFLAGS = @CXXFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +EXTERNAL_CFLAGS = @EXTERNAL_CFLAGS@ +EXTERNAL_LIBS = @EXTERNAL_LIBS@ +FGREP = @FGREP@ +FLAC_CFLAGS = @FLAC_CFLAGS@ +FLAC_LIBS = @FLAC_LIBS@ +GCC_MAJOR_VERSION = @GCC_MAJOR_VERSION@ +GCC_MINOR_VERSION = @GCC_MINOR_VERSION@ +GCC_VERSION = @GCC_VERSION@ +GETCONF = @GETCONF@ +GREP = @GREP@ +HAVE_AUTOGEN = @HAVE_AUTOGEN@ +HAVE_MKOCTFILE = @HAVE_MKOCTFILE@ +HAVE_OCTAVE = @HAVE_OCTAVE@ +HAVE_OCTAVE_CONFIG = @HAVE_OCTAVE_CONFIG@ +HAVE_WINE = @HAVE_WINE@ +HOST_TRIPLET = @HOST_TRIPLET@ +HTML_BGCOLOUR = @HTML_BGCOLOUR@ +HTML_FGCOLOUR = @HTML_FGCOLOUR@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIBTOOL_DEPS = @LIBTOOL_DEPS@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +MKOCTFILE = @MKOCTFILE@ +MKOCTFILE_VERSION = @MKOCTFILE_VERSION@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OCTAVE = @OCTAVE@ +OCTAVE_CONFIG = @OCTAVE_CONFIG@ +OCTAVE_CONFIG_VERSION = @OCTAVE_CONFIG_VERSION@ +OCTAVE_DEST_MDIR = @OCTAVE_DEST_MDIR@ +OCTAVE_DEST_ODIR = @OCTAVE_DEST_ODIR@ +OCTAVE_VERSION = @OCTAVE_VERSION@ +OGG_CFLAGS = @OGG_CFLAGS@ +OGG_LIBS = @OGG_LIBS@ +OS_SPECIFIC_CFLAGS = @OS_SPECIFIC_CFLAGS@ +OS_SPECIFIC_LINKS = @OS_SPECIFIC_LINKS@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ +PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ +RANLIB = @RANLIB@ +RC = @RC@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SF_COUNT_MAX = @SF_COUNT_MAX@ +SHARED_VERSION_INFO = @SHARED_VERSION_INFO@ +SHELL = @SHELL@ +SHLIB_VERSION_ARG = @SHLIB_VERSION_ARG@ +SIZEOF_SF_COUNT_T = @SIZEOF_SF_COUNT_T@ +SNDIO_LIBS = @SNDIO_LIBS@ +SPEEX_CFLAGS = @SPEEX_CFLAGS@ +SPEEX_LIBS = @SPEEX_LIBS@ +SQLITE3_CFLAGS = @SQLITE3_CFLAGS@ +SQLITE3_LIBS = @SQLITE3_LIBS@ +STRIP = @STRIP@ +TYPEOF_SF_COUNT_T = @TYPEOF_SF_COUNT_T@ +VERSION = @VERSION@ +VORBISENC_CFLAGS = @VORBISENC_CFLAGS@ +VORBISENC_LIBS = @VORBISENC_LIBS@ +VORBIS_CFLAGS = @VORBIS_CFLAGS@ +VORBIS_LIBS = @VORBIS_LIBS@ +WIN_RC_VERSION = @WIN_RC_VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_CXX = @ac_ct_CXX@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = $(htmldocdir) +htmldocdir = @htmldocdir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target = @target@ +target_alias = @target_alias@ +target_cpu = @target_cpu@ +target_os = @target_os@ +target_vendor = @target_vendor@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +html_DATA = index.html libsndfile.jpg libsndfile.css api.html command.html \ + bugs.html sndfile_info.html new_file_type.HOWTO pkgconfig.html \ + win32.html FAQ.html lists.html embedded_files.html octave.html \ + dither.html tutorial.html + +EXTRA_DIST = $(html_DATA) +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --gnu doc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +libsndfile.css: $(top_builddir)/config.status $(srcdir)/libsndfile.css.in + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-htmlDATA: $(html_DATA) + @$(NORMAL_INSTALL) + test -z "$(htmldir)" || $(MKDIR_P) "$(DESTDIR)$(htmldir)" + @list='$(html_DATA)'; test -n "$(htmldir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ + done + +uninstall-htmlDATA: + @$(NORMAL_UNINSTALL) + @list='$(html_DATA)'; test -n "$(htmldir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(htmldir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(htmldir)" && rm -f $$files +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(htmldir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-htmlDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-htmlDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-htmlDATA install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am uninstall-htmlDATA + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/doc/NEWS b/doc/NEWS new file mode 100644 index 0000000..9626d45 --- /dev/null +++ b/doc/NEWS @@ -0,0 +1,175 @@ +Version 1.0.25 (2011-07-13) + * Fix for Secunia Advisory SA45125, heap overflow in PAF file handler. + * Accept broken WAV files with blockalign == 0. + * Minor bug fixes and improvements. + +Version 1.0.24 (2011-03-23) + * WAV files now have an 18 byte u-law and A-law fmt chunk. + * Document virtual I/O functionality. + * Two new methods rawHandle() and takeOwnership() in sndfile.hh. + * AIFF fix for non-zero offset value in SSND chunk. + * Minor bug fixes and improvements. + +Version 1.0.23 (2010-10-10) + * Add version metadata to Windows DLL. + * Add a missing 'inline' to sndfile.hh. + * Update docs. + * Minor bug fixes and improvements. + +Version 1.0.22 (2010-10-04) + * Couple of fixes for SDS file writer. + * Fixes arising from static analysis. + * Handle FLAC files with ID3 meta data at start of file. + * Handle FLAC files which report zero length. + * Other minor bug fixes and improvements. + +Version 1.0.21 (2009-12-13) + * Add a couple of new binary programs to programs/ dir. + * Remove sndfile-jackplay (now in sndfile-tools package). + * Add windows only function sf_wchar_open(). + * Bunch of minor bug fixes. + +Version 1.0.20 (2009-05-14) + * Fix potential heap overflow in VOC file parser (Tobias Klein, http://www.trapkit.de/). + +Version 1.0.19 (2009-03-02) + * Fix for CVE-2009-0186 (Alin Rad Pop, Secunia Research). + * Huge number of minor bug fixes as a result of static analysis. + +Version 1.0.18 (2009-02-07) + * Add Ogg/Vorbis support (thanks to John ffitch). + * Remove captive FLAC library. + * Many new features and bug fixes. + * Generate Win32 and Win64 pre-compiled binaries. + +Version 1.0.17 (2006-08-31) + * Add sndfile.hh C++ wrapper. + * Update Win32 MinGW build instructions. + * Minor bug fixes and cleanups. + +Version 1.0.16 (2006-04-30) + * Add support for Broadcast (BEXT) chunks in WAV files. + * Implement new commands SFC_GET_SIGNAL_MAX and SFC_GET_MAX_ALL_CHANNELS. + * Add support for RIFX (big endian WAV variant). + * Fix configure script bugs. + * Fix bug in INST and MARK chunk writing for AIFF files. + +Version 1.0.15 (2006-03-16) + * Fix some ia64 issues. + * Fix precompiled DLL. + * Minor bug fixes. + +Version 1.0.14 (2006-02-19) + * Really fix MinGW compile problems. + * Minor bug fixes. + +Version 1.0.13 (2006-01-21) + * Fix for MinGW compiler problems. + * Allow readin/write of instrument chunks from WAV and AIFF files. + * Compile problem fix for Solaris compiler. + * Minor cleanups and bug fixes. + +Version 1.0.12 (2005-09-30) + * Add support for FLAC and Apple's Core Audio Format (CAF). + * Add virtual I/O interface (still needs docs). + * Cygwin and other Win32 fixes. + * Minor bug fixes and cleanups. + +Version 1.0.11 (2004-11-15) + * Add support for SD2 files. + * Add read support for loop info in WAV and AIFF files. + * Add more tests. + * Improve type safety. + * Minor optimisations and bug fixes. + +Version 1.0.10 (2004-06-15) + * Fix AIFF read/write mode bugs. + * Add support for compiling Win32 DLLS using MinGW. + * Fix problems resulting in failed compiles with gcc-2.95. + * Improve test suite. + * Minor bug fixes. + +Version 1.0.9 (2004-03-30) + * Add handling of AVR (Audio Visual Research) files. + * Improve handling of WAVEFORMATEXTENSIBLE WAV files. + * Fix for using pipes on Win32. + +Version 1.0.8 (2004-03-14) + * Correct peak chunk handing for files with > 16 tracks. + * Fix for WAV files with huge number of CUE chunks. + +Version 1.0.7 (2004-02-25) + * Fix clip mode detection on ia64, MIPS and other CPUs. + * Fix two MacOSX build problems. + +Version 1.0.6 (2004-02-08) + * Added support for native Win32 file access API (Ross Bencina). + * New mode to add clippling then a converting from float/double to integer + would otherwise wrap around. + * Fixed a bug in reading/writing files > 2Gig on Linux, Solaris and others. + * Many minor bug fixes. + * Other random fixes for Win32. + +Version 1.0.5 (2003-05-03) + * Added support for HTK files. + * Added new function sf_open_fd() to allow for secure opening of temporary + files as well as reading/writing sound files embedded within larger + container files. + * Added string support for AIFF files. + * Minor bug fixes and code cleanups. + +Version 1.0.4 (2003-02-02) + * Added suport of PVF and XI files. + * Added functionality for setting and retreiving strings from sound files. + * Minor code cleanups and bug fixes. + +Version 1.0.3 (2002-12-09) + * Minor bug fixes. + +Version 1.0.2 (2002-11-24) + * Added support for VOX ADPCM. + * Improved error reporting. + * Added version scripting on Linux and Solaris. + * Minor bug fixes. + +Version 1.0.1 (2002-09-14) + * Added MAT and MAT5 file formats. + * Minor bug fixes. + +Version 1.0.0 (2002-08-16) + * Final release for 1.0.0. + +Version 1.0.0rc6 (2002-08-14) + * Release candidate 6 for the 1.0.0 series. + * MacOS9 fixes. + +Version 1.0.0rc5 (2002-08-10) + * Release candidate 5 for the 1.0.0 series. + * Changed the definition of sf_count_t which was causing problems when + libsndfile was compiled with other libraries (ie WxWindows). + * Minor bug fixes. + * Documentation cleanup. + +Version 1.0.0rc4 (2002-08-03) + * Release candidate 4 for the 1.0.0 series. + * Minor bug fixes. + * Fix broken Win32 "make check". + +Version 1.0.0rc3 (2002-08-02) + * Release candidate 3 for the 1.0.0 series. + * Fix bug where libsndfile was reading beyond the end of the data chunk. + * Added on-the-fly header updates on write. + * Fix a couple of documentation issues. + +Version 1.0.0rc2 (2002-06-24) + * Release candidate 2 for the 1.0.0 series. + * Fix compile problem for Win32. + +Version 1.0.0rc1 (2002-06-24) + * Release candidate 1 for the 1.0.0 series. + +Version 0.0.28 (2002-04-27) + * Last offical release of 0.0.X series of the library. + +Version 0.0.8 (1999-02-16) + * First offical release. diff --git a/doc/README b/doc/README new file mode 100644 index 0000000..0676711 --- /dev/null +++ b/doc/README @@ -0,0 +1,65 @@ +This is libsndfile, 1.0.25 + +libsndfile is a library of C routines for reading and writing +files containing sampled audio data. + +The src/ directory contains the source code for library itself. + +The doc/ directory contains the libsndfile documentation. + +The examples/ directory contains examples of how to write code using +libsndfile. + +The tests/ directory contains programs which link against libsndfile +and test its functionality. + +The src/GSM610 directory contains code written by Jutta Degener and Carsten +Bormann. Their original code can be found at : + http://kbs.cs.tu-berlin.de/~jutta/toast.html + +The src/G72x directory contains code written and released by Sun Microsystems +under a suitably free license. + + +LINUX +----- +Whereever possible, you should use the packages supplied by your Linux +distribution. + +If you really do need to compile from source it should be as easy as: + + ./configure + make + make install + +Since libsndfile optionally links against libFLAC, libogg and libvorbis, you +will need to install appropriate versions of these libraries before running +configure as above. + + +UNIX +---- +Compile as for Linux. + + +Win32/Win64 +----------- +The default Windows compilers are nowhere near compliant with the 1999 ISO +C Standard and hence not able to compile libsndfile. + +Please use the libsndfile binaries available on the libsndfile web site. + + +MacOSX +------ +Building on MacOSX should be the same as building it on any other Unix. + + +CONTACTS +-------- + +libsndfile was written by Erik de Castro Lopo (erikd AT mega-nerd DOT com). +The libsndfile home page is at : + + http://www.mega-nerd.com/libsndfile/ + diff --git a/doc/api.html b/doc/api.html new file mode 100644 index 0000000..33d53dd --- /dev/null +++ b/doc/api.html @@ -0,0 +1,781 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> + +<HEAD> + <TITLE> + The libsndfile API + </TITLE> + <META NAME="Author" CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)"> + <META NAME="Description" CONTENT="The libsndfile API."> + <META NAME="Keywords" CONTENT="WAV AIFF AU libsndfile sound audio dsp Linux"> + <LINK REL="stylesheet" HREF="libsndfile.css" TYPE="text/css" MEDIA="all"> + <LINK REL="stylesheet" HREF="print.css" TYPE="text/css" MEDIA="print"> +</HEAD> + +<BODY> + +<BR> +<H1><B>libsndfile</B></H1> +<P> + Libsndfile is a library designed to allow the reading and writing of many + different sampled sound file formats (such as MS Windows WAV and the Apple/SGI + AIFF format) through one standard library interface. +</P> +<!-- pepper --> +<P> + During read and write operations, formats are seamlessly converted between the + format the application program has requested or supplied and the file's data + format. The application programmer can remain blissfully unaware of issues + such as file endian-ness and data format. See <A HREF="#note1">Note 1</A> and + <A HREF="#note2">Note 2</A>. +</P> +<!-- pepper --> +<P> + Every effort is made to keep these documents up-to-date, error free and + unambiguous. + However, since maintaining the documentation is the least fun part of working + on libsndfile, these docs can and do fall behind the behaviour of library. + If any errors, omissions or ambiguities are found, please notify me (erikd) + at mega-nerd dot com. +</P> +<!-- pepper --> +<P> + To supplement this reference documentation, there are simple example programs + included in the source code tarball. + The test suite which is also part of the source code tarball is also a good + place to look for the correct usage of the library functions. +</P> +<!-- pepper --> +<P> + <B> Finally, if you think there is some feature missing from libsndfile, check that + it isn't already implemented (and documented) + <A HREF="command.html">here</A>. + </B> +</P> + +<H2><B>Synopsis</B></H2> +<P> +The functions of libsndfile are defined as follows: +</P> +<!-- pepper --> +<PRE> + #include <stdio.h> + #include <sndfile.h> + + SNDFILE* <A HREF="#open">sf_open</A> (const char *path, int mode, SF_INFO *sfinfo) ; + SNDFILE* <A HREF="#open_fd">sf_open_fd</A> (int fd, int mode, SF_INFO *sfinfo, int close_desc) ; + SNDFILE* <A HREF="#open_virtual">sf_open_virtual</A> (SF_VIRTUAL_IO *sfvirtual, int mode, SF_INFO *sfinfo, void *user_data) ; + int <A HREF="#check">sf_format_check</A> (const SF_INFO *info) ; + + sf_count_t <A HREF="#seek">sf_seek</A> (SNDFILE *sndfile, sf_count_t frames, int whence) ; + + int <A HREF="command.html">sf_command</A> (SNDFILE *sndfile, int cmd, void *data, int datasize) ; + + int <A HREF="#error">sf_error</A> (SNDFILE *sndfile) ; + const char* <A HREF="#error">sf_strerror</A> (SNDFILE *sndfile) ; + const char* <A HREF="#error">sf_error_number</A> (int errnum) ; + + int <A HREF="#error">sf_perror</A> (SNDFILE *sndfile) ; + int <A HREF="#error">sf_error_str</A> (SNDFILE *sndfile, char* str, size_t len) ; + + int <A HREF="#close">sf_close</A> (SNDFILE *sndfile) ; + void <A HREF="#write_sync">sf_write_sync</A> (SNDFILE *sndfile) ; + + sf_count_t <A HREF="#read">sf_read_short</A> (SNDFILE *sndfile, short *ptr, sf_count_t items) ; + sf_count_t <A HREF="#read">sf_read_int</A> (SNDFILE *sndfile, int *ptr, sf_count_t items) ; + sf_count_t <A HREF="#read">sf_read_float</A> (SNDFILE *sndfile, float *ptr, sf_count_t items) ; + sf_count_t <A HREF="#read">sf_read_double</A> (SNDFILE *sndfile, double *ptr, sf_count_t items) ; + + sf_count_t <A HREF="#readf">sf_readf_short</A> (SNDFILE *sndfile, short *ptr, sf_count_t frames) ; + sf_count_t <A HREF="#readf">sf_readf_int</A> (SNDFILE *sndfile, int *ptr, sf_count_t frames) ; + sf_count_t <A HREF="#readf">sf_readf_float</A> (SNDFILE *sndfile, float *ptr, sf_count_t frames) ; + sf_count_t <A HREF="#readf">sf_readf_double</A> (SNDFILE *sndfile, double *ptr, sf_count_t frames) ; + + sf_count_t <A HREF="#write">sf_write_short</A> (SNDFILE *sndfile, short *ptr, sf_count_t items) ; + sf_count_t <A HREF="#write">sf_write_int</A> (SNDFILE *sndfile, int *ptr, sf_count_t items) ; + sf_count_t <A HREF="#write">sf_write_float</A> (SNDFILE *sndfile, float *ptr, sf_count_t items) ; + sf_count_t <A HREF="#write">sf_write_double</A> (SNDFILE *sndfile, double *ptr, sf_count_t items) ; + + sf_count_t <A HREF="#writef">sf_writef_short</A> (SNDFILE *sndfile, short *ptr, sf_count_t frames) ; + sf_count_t <A HREF="#writef">sf_writef_int</A> (SNDFILE *sndfile, int *ptr, sf_count_t frames) ; + sf_count_t <A HREF="#writef">sf_writef_float</A> (SNDFILE *sndfile, float *ptr, sf_count_t frames) ; + sf_count_t <A HREF="#writef">sf_writef_double</A> (SNDFILE *sndfile, double *ptr, sf_count_t frames) ; + + sf_count_t <A HREF="#raw">sf_read_raw</A> (SNDFILE *sndfile, void *ptr, sf_count_t bytes) ; + sf_count_t <A HREF="#raw">sf_write_raw</A> (SNDFILE *sndfile, void *ptr, sf_count_t bytes) ; + + const char* <A HREF="#string">sf_get_string</A> (SNDFILE *sndfile, int str_type) ; + int <A HREF="#string">sf_set_string</A> (SNDFILE *sndfile, int str_type, const char* str) ; + +</PRE> +<!-- pepper --> +<P> +SNDFILE* is an anonymous pointer to data which is private to the library. +</P> + + +<A NAME="open"></A> +<H2><B>File Open Function</B></H2> + +<PRE> + SNDFILE* sf_open (const char *path, int mode, SF_INFO *sfinfo) ; +</PRE> + +<P> +The SF_INFO structure is for passing data between the calling function and the library +when opening a file for reading or writing. It is defined in sndfile.h as follows: +</P> +<!-- pepper --> +<PRE> + typedef struct + { sf_count_t frames ; /* Used to be called samples. */ + int samplerate ; + int channels ; + int format ; + int sections ; + int seekable ; + } SF_INFO ; +</PRE> + +<P> +The mode parameter for this function can be any one of the following three values: +</P> +<!-- pepper --> +<PRE> + SFM_READ - read only mode + SFM_WRITE - write only mode + SFM_RDWR - read/write mode +</PRE> + +<P> +When opening a file for read, the <b>format</B> field should be set to zero before +calling sf_open(). +The only exception to this is the case of RAW files where the caller has to set +the samplerate, channels and format fields to valid values. +All other fields of the structure are filled in by the library. +</P> +<!-- pepper --> +<P> +When opening a file for write, the caller must fill in structure members samplerate, +channels, and format. +</P> +<!-- pepper --> +<P> +The format field in the above SF_INFO structure is made up of the bit-wise OR of a +major format type (values between 0x10000 and 0x08000000), a minor format type +(with values less than 0x10000) and an optional endian-ness value. +The currently understood formats are listed in sndfile.h as follows and also include +bitmasks for separating major and minor file types. +Not all combinations of endian-ness and major and minor file types are valid. +</P> +<!-- pepper --> +<PRE> + enum + { /* Major formats. */ + SF_FORMAT_WAV = 0x010000, /* Microsoft WAV format (little endian). */ + 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 Dialogic ADPCM encoding. */ + + 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 + } ; +</PRE> +<!-- pepper --> +<P> +Every call to sf_open() should be matched with a call to sf_close() to free up +memory allocated during the call to sf_open(). +</P> +<!-- pepper --> +<P> +On success, the sf_open function returns a non-NULL pointer which should be +passed as the first parameter to all subsequent libsndfile calls dealing with +that audio file. +On fail, the sf_open function returns a NULL pointer. +An explanation of the error can obtained by passing NULL to + <A HREF="#error">sf_strerror</A>. +</P> + +<A NAME="open_fd"></A> +<H3><B>File Descriptor Open</B></H3> + +<PRE> + SNDFILE* sf_open_fd (int fd, int mode, SF_INFO *sfinfo, int close_desc) ; +</PRE> + +<P> +<b>Note:</b> On Microsoft Windows, this function does not work if the +application and the libsndfile DLL are linked to different versions of the +Microsoft C runtime DLL. +</P> +<P> +The second open function takes a file descriptor of a file that has already been +opened. +Care should be taken to ensure that the mode of the file represented by the +descriptor matches the mode argument. +This function is useful in the following circumstances: +</P> + +<UL> + <LI>Opening temporary files securely (ie use the tmpfile() to return a + FILE* pointer and then using fileno() to retrieve the file descriptor + which is then passed to libsndfile). + <LI>Opening files with file names using OS specific character encodings + and then passing the file descriptor to sf_open_fd(). + <LI>Opening sound files embedded within larger files. + <A HREF="embedded_files.html">More info</A>. +</UL> + +<P> +Every call to sf_open_fd() should be matched with a call to sf_close() to free up +memory allocated during the call to sf_open(). +</P> + +<P> +When sf_close() is called, the file descriptor is only closed if the <B>close_desc</B> +parameter was TRUE when the sf_open_fd() function was called. +</P> + +<P> +On success, the sf_open_fd function returns a non-NULL pointer which should be +passed as the first parameter to all subsequent libsndfile calls dealing with +that audio file. +On fail, the sf_open_fd function returns a NULL pointer. +</P> + +<A NAME="open_virtual"></A> +<h3><b>Virtual File Open Function</b></h3> +<pre> + SNDFILE* sf_open_virtual (SF_VIRTUAL_IO *sfvirtual, int mode, SF_INFO *sfinfo, void *user_data) ; +</pre> +<p> + Opens a soundfile from a virtual file I/O context which is provided + by the caller. This is usually used to interface libsndfile to a stream or buffer + based system. Apart from the sfvirtual and the user_data parameters this function behaves + like <a href="#open">sf_open</a>. +</p> + +<pre> + typedef struct + { sf_vio_get_filelen get_filelen ; + sf_vio_seek seek ; + sf_vio_read read ; + sf_vio_write write ; + sf_vio_tell tell ; + } SF_VIRTUAL_IO ; +</pre> +<p> +Libsndfile calls the callbacks provided by the SF_VIRTUAL_IO structure when opening, reading +and writing to the virtual file context. The user_data pointer is a user defined context which +will be available in the callbacks. +</p> +<pre> + 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) ; +</pre> +<h4>sf_vio_get_filelen</h4> +<pre> + typedef sf_count_t (*sf_vio_get_filelen) (void *user_data) ; +</pre> +<p> +The virtual file contex must return the length of the virtual file in bytes.<br> +</p> +<h4>sf_vio_seek</h4> +<pre> + typedef sf_count_t (*sf_vio_seek) (sf_count_t offset, int whence, void *user_data) ; +</pre> +<p> +The virtual file context must seek to offset using the seek mode provided by whence which is one of<br> +</p> +<pre> + SEEK_CUR + SEEK_SET + SEEK_END +</pre> +<p> +The return value must contain the new offset in the file. +</p> +<h4>sf_vio_read</h4> +<pre> + typedef sf_count_t (*sf_vio_read) (void *ptr, sf_count_t count, void *user_data) ; +</pre> +<p> +The virtual file context must copy ("read") "count" bytes into the +buffer provided by ptr and return the count of actually copied bytes. +</p> +<h4>sf_vio_write</h4> +<pre> + typedef sf_count_t (*sf_vio_write) (const void *ptr, sf_count_t count, void *user_data) ; +</pre> +<p> +The virtual file context must process "count" bytes stored in the +buffer passed with ptr and return the count of actually processed bytes.<br> +</p> +<h4>sf_vio_tell</h4> +<pre> + typedef sf_count_t (*sf_vio_tell) (void *user_data) ; +</pre> +<p> +Return the current position of the virtual file context.<br> +</p> + + +<A NAME="check"></A> +<BR><H2><B>Format Check Function</B></H2> + +<PRE> + int sf_format_check (const SF_INFO *info) ; +</PRE> +<!-- pepper --> +<P> +This function allows the caller to check if a set of parameters in the SF_INFO struct +is valid before calling sf_open (SFM_WRITE). +</P> +<P> +sf_format_check returns TRUE if the parameters are valid and FALSE otherwise. +</P> + +<A NAME="seek"></A> +<BR><H2><B>File Seek Functions</B></H2> + +<PRE> + sf_count_t sf_seek (SNDFILE *sndfile, sf_count_t frames, int whence) ; +</PRE> + +<P> +The file seek functions work much like lseek in unistd.h with the exception that +the non-audio data is ignored and the seek only moves within the audio data section of +the file. +In addition, seeks are defined in number of (multichannel) frames. +Therefore, a seek in a stereo file from the current position forward with an offset +of 1 would skip forward by one sample of both channels. +</P> + +<P> +like lseek(), the whence parameter can be any one of the following three values: +</P> + +<PRE> + SEEK_SET - The offset is set to the start of the audio data plus offset (multichannel) frames. + SEEK_CUR - The offset is set to its current location plus offset (multichannel) frames. + SEEK_END - The offset is set to the end of the data plus offset (multichannel) frames. +</PRE> +<!-- pepper --> +<P> +Internally, libsndfile keeps track of the read and write locations using separate +read and write pointers. +If a file has been opened with a mode of SFM_RDWR, bitwise OR-ing the standard whence +values above with either SFM_READ or SFM_WRITE allows the read and write pointers to +be modified separately. +If the SEEK_* values are used on their own, the read and write pointers are +both modified. +</P> + +<P> +Note that the frames offset can be negative and in fact should be when SEEK_END is used for the +whence parameter. +</P> +<P> +sf_seek will return the offset in (multichannel) frames from the start of the audio data +or -1 if an error occured (ie an attempt is made to seek beyond the start or end of the file). +</P> + +<A NAME="error"></A> +<H2><BR><B>Error Reporting Functions</B></H2> + + +<PRE> + int sf_error (SNDFILE *sndfile) ; +</PRE> +<P> +This function returns the current error number for the given SNDFILE. +The error number may be one of the following: +</P> +<PRE> + 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 + } ; +</PRE> +<!-- pepper --> +<P> +or any one of many other internal error values. +Applications should only test the return value against error values defined in +<sndfile.h> as the internal error values are subject to change at any +time. +For errors not in the above list, the function sf_error_number() can be used to +convert it to an error string. +</P> + +<PRE> + const char* sf_strerror (SNDFILE *sndfile) ; + const char* sf_error_number (int errnum) ; +</PRE> + +<P> +The error functions sf_strerror() and sf_error_number() convert the library's internal +error enumerations into text strings. +</P> +<PRE> + int sf_perror (SNDFILE *sndfile) ; + int sf_error_str (SNDFILE *sndfile, char* str, size_t len) ; +</PRE> + +<P> +The functions sf_perror() and sf_error_str() are deprecated and will be dropped +from the library at some later date. +</P> + +<A NAME="close"></A> +<H2><BR><B>File Close Function</B></H2> + +<PRE> + int sf_close (SNDFILE *sndfile) ; +</PRE> +<!-- pepper --> +<P> +The close function closes the file, deallocates its internal buffers and returns +0 on success or an error value otherwise. +</P> +<BR> + +<A NAME="write_sync"></A> +<H2><BR><B>Write Sync Function</B></H2> + +<PRE> + void sf_write_sync (SNDFILE *sndfile) ; +</PRE> +<!-- pepper --> +<P> +If the file is opened SFM_WRITE or SFM_RDWR, call the operating system's function +to force the writing of all file cache buffers to disk. If the file is opened +SFM_READ no action is taken. +</P> +<BR> + + +<A NAME="read"></A> +<H2><BR><B>File Read Functions (Items)</B></H2> + +<PRE> + sf_count_t sf_read_short (SNDFILE *sndfile, short *ptr, sf_count_t items) ; + sf_count_t sf_read_int (SNDFILE *sndfile, int *ptr, sf_count_t items) ; + sf_count_t sf_read_float (SNDFILE *sndfile, float *ptr, sf_count_t items) ; + sf_count_t sf_read_double (SNDFILE *sndfile, double *ptr, sf_count_t items) ; +</PRE> + +<P> +The file read items functions fill the array pointed to by ptr with the requested +number of items. The items parameter must be an integer product of the number +of channels or an error will occur. +</P> +<!-- pepper --> +<P> +It is important to note that the data type used by the calling program and the data +format of the file do not need to be the same. For instance, it is possible to open +a 16 bit PCM encoded WAV file and read the data using sf_read_float(). The library +seamlessly converts between the two formats on-the-fly. See +<A HREF="#note1">Note 1</A>. +</P> +<!-- pepper --> +<P> +The sf_read_XXXX functions return the number of items read. +Unless the end of the file was reached during the read, the return value should +equal the number of items requested. +Attempts to read beyond the end of the file will not result in an error but will +cause the sf_read_XXXX functions to return less than the number of items requested +or 0 if already at the end of the file. +</P> + +<A NAME="readf"></A> +<H2><BR><B>File Read Functions (Frames)</B></H2> + +<PRE> + sf_count_t sf_readf_short (SNDFILE *sndfile, short *ptr, sf_count_t frames) ; + sf_count_t sf_readf_int (SNDFILE *sndfile, int *ptr, sf_count_t frames) ; + sf_count_t sf_readf_float (SNDFILE *sndfile, float *ptr, sf_count_t frames) ; + sf_count_t sf_readf_double (SNDFILE *sndfile, double *ptr, sf_count_t frames) ; +</PRE> +<!-- pepper --> +<P> +The file read frames functions fill the array pointed to by ptr with the requested +number of frames of data. The array must be large enough to hold the product of +frames and the number of channels. +</P> + +<P><B> +Care must be taken to ensure that there is enough space in the array pointed to by +ptr, to take (frames * channels) number of items (shorts, ints, floats or doubles). +</B></P> + +<P> +The sf_readf_XXXX functions return the number of frames read. +Unless the end of the file was reached during the read, the return value should equal +the number of frames requested. +Attempts to read beyond the end of the file will not result in an error but will cause +the sf_readf_XXXX functions to return less than the number of frames requested or 0 if +already at the end of the file. +</P> + +<A NAME="write"></A> +<H2><BR><B>File Write Functions (Items)</B></H2> + +<PRE> + sf_count_t sf_write_short (SNDFILE *sndfile, short *ptr, sf_count_t items) ; + sf_count_t sf_write_int (SNDFILE *sndfile, int *ptr, sf_count_t items) ; + sf_count_t sf_write_float (SNDFILE *sndfile, float *ptr, sf_count_t items) ; + sf_count_t sf_write_double (SNDFILE *sndfile, double *ptr, sf_count_t items) ; +</PRE> + +<P> +The file write items functions write the data in the array pointed to by ptr to the file. +The items parameter must be an integer product of the number of channels or an error +will occur. +</P> +<!-- pepper --> +<P> +It is important to note that the data type used by the calling program and the data +format of the file do not need to be the same. For instance, it is possible to open +a 16 bit PCM encoded WAV file and write the data using sf_write_float(). The library +seamlessly converts between the two formats on-the-fly. See +<A HREF="#note1">Note 1</A>. +</P> +<P> +The sf_write_XXXX functions return the number of items written (which should be the +same as the items parameter). +</P> + +<A NAME="writef"></A> +<H2><BR><B>File Write Functions (Frames)</B></H2> + +<PRE> + sf_count_t sf_writef_short (SNDFILE *sndfile, short *ptr, sf_count_t frames) ; + sf_count_t sf_writef_int (SNDFILE *sndfile, int *ptr, sf_count_t frames) ; + sf_count_t sf_writef_float (SNDFILE *sndfile, float *ptr, sf_count_t frames) ; + sf_count_t sf_writef_double (SNDFILE *sndfile, double *ptr, sf_count_t frames) ; +</PRE> + +<P> +The file write frames functions write the data in the array pointed to by ptr to the file. +The array must be large enough to hold the product of frames and the number of channels. +</P> +<P> +The sf_writef_XXXX functions return the number of frames written (which should be the +same as the frames parameter). +</P> + +<A NAME="raw"></A> +<H2><BR><B>Raw File Read and Write Functions</B></H2> +<!-- pepper --> +<PRE> + 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) ; +</PRE> + +<P> +<b>Note:</b> Unless you are writing an external decoder/encode that uses +libsndfile to handle the file headers, you should not be using these +functions. +</P> + +<P> +The raw read and write functions read raw audio data from the audio file (not to be +confused with reading RAW header-less PCM files). The number of bytes read or written +must always be an integer multiple of the number of channels multiplied by the number +of bytes required to represent one sample from one channel. +</P> +<!-- pepper --> +<P> +The raw read and write functions return the number of bytes read or written (which +should be the same as the bytes parameter). +</P> + +<P> +<B> +Note : The result of using of both regular reads/writes and raw reads/writes on +compressed file formats other than SF_FORMAT_ALAW and SF_FORMAT_ULAW is undefined. +</B> +</P> + +<p> +See also : <a href="command.html#SFC_RAW_NEEDS_ENDSWAP">SFC_RAW_NEEDS_ENDSWAP</a> +</p> + +<A NAME="string"></A> +<H2><BR><B>Functions for Reading and Writing String Data</B></H2> + + +<PRE> + const char* sf_get_string (SNDFILE *sndfile, int str_type) ; + int sf_set_string (SNDFILE *sndfile, int str_type, const char* str) ; +</PRE> + +<P> +These functions allow strings to be set on files opened for write and to be +retrieved from files opened for read where supported by the given file type. +The <B>str_type</B> parameter can be any one of the following string types: +</P> + +<PRE> + enum + { SF_STR_TITLE, + SF_STR_COPYRIGHT, + SF_STR_SOFTWARE, + SF_STR_ARTIST, + SF_STR_COMMENT, + SF_STR_DATE, + SF_STR_ALBUM, + SF_STR_LICENSE, + SF_STR_TRACKNUMBER, + SF_STR_GENRE + } ; +</PRE> + +<P> +The sf_get_string() function returns the specified string if it exists and a +NULL pointer otherwise. +In addition to the string ids above, SF_STR_FIRST (== SF_STR_TITLE) and +SF_STR_LAST (always the same as the highest numbers string id) are also +available to allow iteration over all the available string ids. +</P> + +<P> +The sf_set_string() function sets the string data. +It returns zero on success and non-zero on error. +The error code can be converted to a string using sf_error_number(). +</P> + + +<P> + +</P> + +<HR> + +<A NAME="note1"></A> +<H2><BR><B>Note 1</B></H2> +<!-- pepper --> +<P> +When converting between integer PCM formats of differing size (ie using sf_read_int() +to read a 16 bit PCM encoded WAV file) libsndfile obeys one simple rule: +</P> + +<P CLASS=indent_block> +Whenever integer data is moved from one sized container to another sized container, +the most significant bit in the source container will become the most significant bit +in the destination container. +</P> + +<P> +When converting between integer data and floating point data, different rules apply. +The default behaviour when reading floating point data (sf_read_float() or +sf_read_double ()) from a file with integer data is normalisation. Regardless of +whether data in the file is 8, 16, 24 or 32 bit wide, the data will be read as +floating point data in the range [-1.0, 1.0]. Similarly, data in the range [-1.0, 1.0] +will be written to an integer PCM file so that a data value of 1.0 will be the largest +allowable integer for the given bit width. This normalisation can be turned on or off +using the <A HREF="command.html">sf_command</A> interface. +</P> + +<A NAME="note2"></A> +<H2><BR><B>Note 2</B></H2> + +<P> +Reading a file containg floating point data (allowable with WAV, AIFF, AU and other +file formats) using integer read methods (sf_read_short() or sf_read_int()) can +produce unexpected results. +For instance the data in the file may have a maximum absolute value < 1.0 which +would mean that all sample values read from the file will be zero. +In order to read these files correctly using integer read methods, it is recommended +that you use the + <A HREF="command.html">sf_command</A> +interface, a command of + <A HREF="command.html#SFC_SET_SCALE_FLOAT_INT_READ">SFC_SET_SCALE_FLOAT_INT_READ</A> +and a parameter of SF_TRUE to force correct scaling. +</P> +<!-- pepper --> +<HR> +<!-- pepper --> +<P> + The libsndfile home page is + <A HREF="http://www.mega-nerd.com/libsndfile/">here</A>. +</P> +<P> +Version : 1.0.25 +</P> +<!-- pepper --> +<!-- pepper --> +<!-- pepper --> +<!-- pepper --> + +</BODY> +</HTML> diff --git a/doc/bugs.html b/doc/bugs.html new file mode 100644 index 0000000..937e189 --- /dev/null +++ b/doc/bugs.html @@ -0,0 +1,77 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> + +<HEAD> + <TITLE> + Bug Reporting + </TITLE> + <META NAME="Author" CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)"> + <LINK REL="stylesheet" HREF="libsndfile.css" TYPE="text/css" MEDIA="all"> + <LINK REL="stylesheet" HREF="print.css" TYPE="text/css" MEDIA="print"> +</HEAD> + +<BODY> + +<CENTER> + <H1><B>Reporting Bugs in libsndfile</B></H1> +</CENTER> +<P> + Before even attempting to report a bug in libsndfile please make sure you have + read the + <A HREF="FAQ.html">Frequently Asked Questions</A>. + If you are having a problem writing code using libsndfile make sure you read + the + <A HREF="api.html">Application Programming Interface</A> + documentation. +</P> +<P> + That said, I am interested in finding and fixing all genuine bugs in libsndfile. + Bugs I want to fix include any of the following problems (and probably others) : +</P> + <UL> + <LI> Compilation problems on new platforms. + <LI> Errors being detected during the `make check' process. + <LI> Segmentation faults occuring inside libsndfile. + <LI> libsndfile hanging when opening a file. + <LI> Supported sound file types being incorrectly read or written. + <LI> Omissions, errors or spelling mistakes in the documentation. + </UL> + +<P> + When submitting a bug report you must include : +</P> + <UL> + <LI> Your system (CPU and memory size should be enough). + <LI> The operating system you are using. + <LI> Whether you are using a package provided by your distribution or you + compiled it youself. + <LI> If you compiled it yourself, the compiler you are using. (Also make + sure to run 'make check'.) + <LI> A description of the problem. + <LI> Information generated by the sndfile-info program (see next paragraph). + <LI> If you are having problems with sndfile-play and ALSA on Linux, I will + need information about your kernel, ALSA version, compiler version, + whether you compiled the kernel/ALSA your self or installed from a + package etc. + </UL> + +<P> + If libsndfile compiles and installs correctly but has difficulty reading a particular + file or type of file you should run the <B>sndfile-info</B> program (from the examples + directory of the libsndfile distribution) on the file. See + <A HREF="sndfile_info.html">here</A> + for an example of the use of the <B>sndfile-info</B> program. +</P> +<P> + Please do not send me a sound file which fails to open under libsndfile unless I + specifically ask you to. The above information should usually suffice for most + problems. +</P> +<P> + Once you have the above information you should email it to one of the + <A HREF="lists.html">mailing lists</a> + (posting to these lists is limited to the list subscribers). + +</P> +</BODY> +</HTML> diff --git a/doc/command.html b/doc/command.html new file mode 100644 index 0000000..3af84c8 --- /dev/null +++ b/doc/command.html @@ -0,0 +1,1605 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> + +<HEAD> + <TITLE> + libsndfile : the sf_command function. + </TITLE> + <META NAME="Author" CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)"> + <!-- Another version at the bottom of the page. --> + <META NAME="Description" CONTENT="The libsndfile API."> + <META NAME="Keywords" CONTENT="WAV AIFF AU libsndfile sound audio dsp Linux"> + <LINK REL="stylesheet" HREF="libsndfile.css" TYPE="text/css" MEDIA="all"> + <LINK REL="stylesheet" HREF="print.css" TYPE="text/css" MEDIA="print"> +</HEAD> + +<BODY> + +<H1><B>sf_command</B></H1> +<PRE> + + int sf_command (SNDFILE *sndfile, int cmd, void *data, int datasize) ; +</PRE> +<P> + This function allows the caller to retrieve information from or change aspects of the + library behaviour. + Examples include retrieving a string containing the library version or changing the + scaling applied to floating point sample data during read and write. + Most of these operations are performed on a per-file basis. +</P> +<P> + The cmd parameter is an integer identifier which is defined in <sndfile.h>. + All of the valid command identifiers have names beginning with "SFC_". + Data is passed to and returned from the library by use of a void pointer. + The library will not read or write more than datasize bytes from the void pointer. + For some calls no data is required in which case data should be NULL and datasize + may be used for some other purpose. +</P> +<P> + The available commands are as follows: +</P> + +<CENTER> +<TABLE BORDER="0" WIDTH="90%" CELLPADDING="4"> +<TR> + <TD><A HREF="#SFC_GET_LIB_VERSION">SFC_GET_LIB_VERSION</A></TD> + <TD>Retrieve the version of the library.</TD> +</TR> +<TR> + <TD><A HREF="#SFC_GET_LOG_INFO">SFC_GET_LOG_INFO</A></TD> + <TD>Retrieve the internal per-file operation log.</TD> +</TR> +<TR> + <TD><A HREF="#SFC_CALC_SIGNAL_MAX">SFC_CALC_SIGNAL_MAX</A></TD> + <TD>Calculate the measured maximum signal value.</TD> +</TR> +<TR> + <TD><A HREF="#SFC_CALC_NORM_SIGNAL_MAX">SFC_CALC_NORM_SIGNAL_MAX</A></TD> + <TD>Calculate the measured normalised maximum signal value.</TD> +</TR> +<TR> + <TD><A HREF="#SFC_CALC_MAX_ALL_CHANNELS">SFC_CALC_MAX_ALL_CHANNELS</A></TD> + <TD>Calculate the peak value for each channel.</TD> +</TR> +<TR> + <TD><A HREF="#SFC_CALC_NORM_MAX_ALL_CHANNELS">SFC_CALC_NORM_MAX_ALL_CHANNELS</A></TD> + <TD>Calculate the normalised peak for each channel.</TD> +</TR> + +<TR> + <TD><A HREF="#SFC_GET_SIGNAL_MAX">SFC_GET_SIGNAL_MAX</A></TD> + <TD>Retrieve the peak value for the file (as stored in the file header).</TD> +</TR> +<TR> + <TD><A HREF="#SFC_GET_MAX_ALL_CHANNELS">SFC_GET_MAX_ALL_CHANNELS</A></TD> + <TD>Retrieve the peak value for each channel (as stored in the file header).</TD> +</TR> + +<TR> + <TD><A HREF="#SFC_SET_NORM_FLOAT">SFC_SET_NORM_FLOAT</A></TD> + <TD>Modify the normalisation behaviour of the floating point reading and writing functions.</TD> +</TR> +<TR> + <TD><A HREF="#SFC_SET_NORM_DOUBLE">SFC_SET_NORM_DOUBLE</A></TD> + <TD>Modify the normalisation behaviour of the double precision floating point reading and writing functions.</TD> +</TR> +<TR> + <TD><A HREF="#SFC_GET_NORM_FLOAT">SFC_GET_NORM_FLOAT</A></TD> + <TD>Retrieve the current normalisation behaviour of the floating point reading and writing functions.</TD> +</TR> +<TR> + <TD><A HREF="#SFC_GET_NORM_DOUBLE">SFC_GET_NORM_DOUBLE</A></TD> + <TD>Retrieve the current normalisation behaviour of the double precision floating point reading and writing functions.</TD> +</TR> +<TR> + <TD><A HREF="#SFC_SET_SCALE_FLOAT_INT_READ">SFC_SET_SCALE_FLOAT_INT_READ</A></TD> + <TD>Set/clear the scale factor when integer (short/int) data is read from a file + containing floating point data.</TD> +</TR> + +<TR> + <TD><A HREF="#SFC_SET_SCALE_INT_FLOAT_WRITE">SFC_SET_SCALE_INT_FLOAT_WRITE</A></TD> + <TD>Set/clear the scale factor when integer (short/int) data is written to a file + as floating point data.</TD> +</TR> + +<TR> + <TD><A HREF="#SFC_GET_SIMPLE_FORMAT_COUNT">SFC_GET_SIMPLE_FORMAT_COUNT</A></TD> + <TD>Retrieve the number of simple formats supported by libsndfile.</TD> +</TR> +<TR> + <TD><A HREF="#SFC_GET_SIMPLE_FORMAT">SFC_GET_SIMPLE_FORMAT</A></TD> + <TD>Retrieve information about a simple format.</TD> +</TR> + +<TR> + <TD><A HREF="#SFC_GET_FORMAT_INFO">SFC_GET_FORMAT_INFO</A></TD> + <TD>Retrieve information about a major or subtype format.</TD> +</TR> + +<TR> + <TD><A HREF="#SFC_GET_FORMAT_MAJOR_COUNT">SFC_GET_FORMAT_MAJOR_COUNT</A></TD> + <TD>Retrieve the number of major formats.</TD> +</TR> +<TR> + <TD><A HREF="#SFC_GET_FORMAT_MAJOR">SFC_GET_FORMAT_MAJOR</A></TD> + <TD>Retrieve information about a major format type.</TD> +</TR> +<TR> + <TD><A HREF="#SFC_GET_FORMAT_SUBTYPE_COUNT">SFC_GET_FORMAT_SUBTYPE_COUNT</A></TD> + <TD>Retrieve the number of subformats.</TD> +</TR> +<TR> + <TD><A HREF="#SFC_GET_FORMAT_SUBTYPE">SFC_GET_FORMAT_SUBTYPE</A></TD> + <TD>Retrieve information about a subformat.</TD> +</TR> + +<TR> + <TD><A HREF="#SFC_SET_ADD_PEAK_CHUNK">SFC_SET_ADD_PEAK_CHUNK</A></TD> + <TD>Switch the code for adding the PEAK chunk to WAV and AIFF files on or off.</TD> +</TR> + +<TR> + <TD><A HREF="#SFC_UPDATE_HEADER_NOW">SFC_UPDATE_HEADER_NOW</A></TD> + <TD>Used when a file is open for write, this command will update the file + header to reflect the data written so far.</TD> +</TR> +<TR> + <TD><A HREF="#SFC_SET_UPDATE_HEADER_AUTO">SFC_SET_UPDATE_HEADER_AUTO</A></TD> + <TD>Used when a file is open for write, this command will cause the file header + to be updated after each write to the file.</TD> +</TR> + +<TR> + <TD><A HREF="#SFC_FILE_TRUNCATE">SFC_FILE_TRUNCATE</A></TD> + <TD>Truncate a file open for write or for read/write.</TD> +</TR> + +<TR> + <TD><A HREF="#SFC_SET_RAW_START_OFFSET">SFC_SET_RAW_START_OFFSET</A></TD> + <TD>Change the data start offset for files opened up as SF_FORMAT_RAW.</TD> +</TR> + +<TR> + <TD><A HREF="#SFC_SET_CLIPPING">SFC_SET_CLIPPING</A></TD> + <TD>Turn on/off automatic clipping when doing floating point to integer + conversion.</TD> +</TR> + +<TR> + <TD><A HREF="#SFC_GET_CLIPPING">SFC_GET_CLIPPING</A></TD> + <TD>Retrieve current clipping setting.</TD> +</TR> + +<TR> + <TD><A HREF="#SFC_GET_EMBED_FILE_INFO">SFC_GET_EMBED_FILE_INFO</A></TD> + <TD>Retrieve information about audio files embedded inside other files.</TD> +</TR> + +<TR> + <TD><A HREF="#SFC_WAVEX_GET_AMBISONIC">SFC_GET_AMBISONIC</A></TD> + <TD>Test a WAVEX file for Ambisonic format</TD> +</TR> + +<TR> + <TD><A HREF="#SFC_WAVEX_SET_AMBISONIC">SFC_SET_AMBISONIC</A></TD> + <TD>Modify a WAVEX header for Ambisonic format</TD> +</TR> + +<TR> + <TD><A HREF="#SFC_SET_VBR_ENCODING_QUALITY">SFC_SET_VBR_ENCODING_QUALITY</A></TD> + <TD>Set the the Variable Bit Rate encoding quality</TD> +</TR> + +<TR> + <TD><A HREF="#SFC_RAW_NEEDS_ENDSWAP">SFC_RAW_NEEDS_ENDSWAP</a></td> + <TD>Determine if raw data needs endswapping</TD> +</TR> + +<TR> + <TD><A HREF="#SFC_GET_BROADCAST_INFO">SFC_GET_BROADCAST_INFO</A></TD> + <TD>Retrieve the Broadcast Chunk info</TD> +</TR> + +<TR> + <TD><A HREF="#SFC_SET_BROADCAST_INFO">SFC_SET_BROADCAST_INFO</A></TD> + <TD>Set the Broadcast Chunk info</TD> +</TR> + +<TR> + <TD><A HREF="#SFC_GET_LOOP_INFO">SFC_GET_LOOP_INFO</A></TD> + <TD>Get loop info</TD> +</TR> + +<TR> + <TD><A HREF="#SFC_GET_INSTRUMENT">SFC_GET_INSTRUMENT</A></TD> + <TD>Get instrument info</TD> +</TR> + +<TR> + <TD><A HREF="#SFC_SET_INSTRUMENT">SFC_SET_INSTRUMENT</A></TD> + <TD>Set instrument info</TD> +</TR> + +<TR> + <TD><A HREF="#SFC_SET_VBR_ENCODING_QUALITY">SFC_SET_VBR_ENCODING_QUALITY</A></TD> + <TD>Set variable bit rate encoding quality</TD> +</TR> + + + +<!-- +<TR> + <TD><A HREF="#add-dither">add dither</A></TD> + <TD>Add dither to output on write.</TD> +</TR> +--> +</TABLE> +</CENTER> + +<BR><BR> + +<HR> + +<!-- ========================================================================= --> +<A NAME="SFC_GET_LIB_VERSION"></A> +<H2><BR><B>SFC_GET_LIB_VERSION</B></H2> +<P> +Retrieve the version of the library as a string. +</P> +<P> +Parameters: +<PRE> + sndfile : Not used + cmd : SFC_GET_LIB_VERSION + data : A pointer to a char buffer + datasize : The size of the the buffer +</PRE> +<P> +Example: +</P> +<PRE> + char buffer [128] ; + sf_command (NULL, SFC_GET_LIB_VERSION, buffer, sizeof (buffer)) ; +</PRE> + +<DL> +<DT>Return value:</DT> + <DD><DD>This call will return the length of the retrieved version string. +</DL> +<DL> +<DT>Notes:</DT> +<DD> +The string returned in the buffer passed to this function will not overflow +the buffer and will always be null terminated . +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_GET_LOG_INFO"></A> +<H2><BR><B>SFC_GET_LOG_INFO</B></H2> +<P> +Retrieve the log buffer generated when opening a file as a string. This log +buffer can often contain a good reason for why libsndfile failed to open a +particular file. +</P> +<P> +Parameters: +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_GET_LOG_INFO + data : A pointer to a char buffer + datasize : The size of the the buffer +</PRE> +<P> +Example: +</P> +<PRE> + char buffer [2048] ; + sf_command (sndfile, SFC_GET_LOG_INFO, buffer, sizeof (buffer)) ; +</PRE> + +<DL> +<DT>Return value:</DT> + <DD><DD>This call will return the length of the retrieved version string. +</DL> +<DL> +<DT>Notes:</DT> +<DD> +The string returned in the buffer passed to this function will not overflow +the buffer and will always be null terminated . +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_CALC_SIGNAL_MAX"></A> +<H2><BR><B>SFC_CALC_SIGNAL_MAX</B></H2> +<P> +Retrieve the measured maximum signal value. This involves reading through +the whole file which can be slow on large files. +</P> +<P> +Parameters: +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_CALC_SIGNAL_MAX + data : A pointer to a double + datasize : sizeof (double) +</PRE> +<P> +Example: +</P> +<PRE> + double max_val ; + sf_command (sndfile, SFC_CALC_SIGNAL_MAX, &max_val, sizeof (max_val)) ; +</PRE> + +<DL> +<DT>Return value:</DT> + <DD><DD>Zero on success, non-zero otherwise. +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_CALC_NORM_SIGNAL_MAX"></A> +<H2><BR><B>SFC_CALC_NORM_SIGNAL_MAX</B></H2> +<P> +Retrieve the measured normalised maximum signal value. This involves reading +through the whole file which can be slow on large files. +</P> +<P> +Parameters: +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_CALC_NORM_SIGNAL_MAX + data : A pointer to a double + datasize : sizeof (double) +</PRE> +<P> +Example: +</P> +<PRE> + double max_val ; + sf_command (sndfile, SFC_CALC_NORM_SIGNAL_MAX, &max_val, sizeof (max_val)) ; +</PRE> + +<DL> +<DT>Return value:</DT> + <DD><DD>Zero on success, non-zero otherwise. +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_CALC_MAX_ALL_CHANNELS"></A> +<H2><BR><B>SFC_CALC_MAX_ALL_CHANNELS</B></H2> +<P> +Calculate the peak value (ie a single number) for each channel. +This involves reading through the whole file which can be slow on large files. +</P> +<P> +Parameters: +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_CALC_MAX_ALL_CHANNELS + data : A pointer to a double + datasize : sizeof (double) * number_of_channels +</PRE> +<P> +Example: +</P> +<PRE> + double peaks [number_of_channels] ; + sf_command (sndfile, SFC_CALC_MAX_ALL_CHANNELS, peaks, sizeof (peaks)) ; +</PRE> +<DL> +<DT>Return value:</DT> + <DD>Zero if peaks have been calculated successfully and non-zero otherwise. +</DL> + + +<!-- ========================================================================= --> +<A NAME="SFC_CALC_NORM_MAX_ALL_CHANNELS"></A> +<H2><BR><B>SFC_CALC_NORM_MAX_ALL_CHANNELS</B></H2> +<P> +Calculate the normalised peak for each channel. +This involves reading through the whole file which can be slow on large files. +</P> +<P> +Parameters: +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_CALC_NORM_MAX_ALL_CHANNELS + data : A pointer to a double + datasize : sizeof (double) * number_of_channels +</PRE> +<P> +Example: +</P> +<PRE> + double peaks [number_of_channels] ; + sf_command (sndfile, SFC_CALC_NORM_MAX_ALL_CHANNELS, peaks, sizeof (peaks)) ; +</PRE> +<DL> +<DT>Return value:</DT> + <DD>Zero if peaks have been calculated successfully and non-zero otherwise. +</DL> + + + + +<!-- ========================================================================= --> +<A NAME="SFC_GET_SIGNAL_MAX"></A> +<H2><BR><B>SFC_GET_SIGNAL_MAX</B></H2> +<P> +Retrieve the peak value for the file as stored in the file header. +</P> +<P> +Parameters: +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_GET_SIGNAL_MAX + data : A pointer to a double + datasize : sizeof (double) +</PRE> +<P> +Example: +</P> +<PRE> + double max_peak ; + sf_command (sndfile, SFC_GET_SIGNAL_MAX, &max_peak, sizeof (max_peak)) ; +</PRE> +<DL> +<DT>Return value:</DT> + <DD>SF_TRUE if the file header contained the peak value. SF_FALSE otherwise. +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_GET_MAX_ALL_CHANNELS"></A> +<H2><BR><B>SFC_GET_MAX_ALL_CHANNELS</B></H2> +<P> +Retrieve the peak value for the file as stored in the file header. +</P> +<P> +Parameters: +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_GET_SIGNAL_MAX + data : A pointer to an array of doubles + datasize : sizeof (double) * number_of_channels +</PRE> +<P> +Example: +</P> +<PRE> + double peaks [number_of_channels] ; + sf_command (sndfile, SFC_GET_MAX_ALL_CHANNELS, peaks, sizeof (peaks)) ; +</PRE> +<DL> +<DT>Return value:</DT> + <DD>SF_TRUE if the file header contains per channel peak values for the file. + SF_FALSE otherwise. +</DL> + + +<!-- ========================================================================= --> +<A NAME="SFC_SET_NORM_FLOAT"></A> +<H2><BR><B>SFC_SET_NORM_FLOAT</B></H2> +<P> +This command only affects data read from or written to using the floating point functions: +</P> +<PRE> + size_t <A HREF="api.html#read">sf_read_float</A> (SNDFILE *sndfile, float *ptr, size_t items) ; + size_t <A HREF="api.html#readf">sf_readf_float</A> (SNDFILE *sndfile, float *ptr, size_t frames) ; + + size_t <A HREF="api.html#write">sf_write_float</A> (SNDFILE *sndfile, float *ptr, size_t items) ; + size_t <A HREF="api.html#writef">sf_writef_float</A> (SNDFILE *sndfile, float *ptr, size_t frames) ; +</PRE> +<P> +Parameters: +</P> +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_SET_NORM_FLOAT + data : NULL + datasize : SF_TRUE or SF_FALSE +</PRE> +<P> +For read operations setting normalisation to SF_TRUE means that the data from all +subsequent reads will be be normalised to the range [-1.0, 1.0]. +</P> +<P> +For write operations, setting normalisation to SF_TRUE means than all data supplied +to the float write functions should be in the range [-1.0, 1.0] and will be scaled +for the file format as necessary. +</P> +<P> +For both cases, setting normalisation to SF_FALSE means that no scaling will take place. +</P> +<P> +Example: +</P> +<PRE> + sf_command (sndfile, SFC_SET_NORM_FLOAT, NULL, SF_TRUE) ; + + sf_command (sndfile, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ; +</PRE> +<DL> +<DT>Return value: </DT> + <DD>Returns the previous float normalisation mode. +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_SET_NORM_DOUBLE"></A> +<H2><BR><B>SFC_SET_NORM_DOUBLE</B></H2> +<P> +This command only affects data read from or written to using the double precision +floating point functions: +</P> +<PRE> + size_t <A HREF="api.html#read">sf_read_double</A> (SNDFILE *sndfile, double *ptr, size_t items) ; + size_t <A HREF="api.html#readf">sf_readf_double</A> (SNDFILE *sndfile, double *ptr, size_t frames) ; + + size_t <A HREF="api.html#write">sf_write_double</A> (SNDFILE *sndfile, double *ptr, size_t items) ; + size_t <A HREF="api.html#writef">sf_writef_double</A> (SNDFILE *sndfile, double *ptr, size_t frames) ; +</PRE> +<P> +Parameters: +</P> +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_SET_NORM_DOUBLE + data : NULL + datasize : SF_TRUE or SF_FALSE +</PRE> +<P> +For read operations setting normalisation to SF_TRUE means that the data +from all subsequent reads will be be normalised to the range [-1.0, 1.0]. +</P> +<P> +For write operations, setting normalisation to SF_TRUE means than all data supplied +to the double write functions should be in the range [-1.0, 1.0] and will be scaled +for the file format as necessary. +</P> +<P> +For both cases, setting normalisation to SF_FALSE means that no scaling will take place. +</P> +<P> +Example: +</P> +<PRE> + sf_command (sndfile, SFC_SET_NORM_DOUBLE, NULL, SF_TRUE) ; + + sf_command (sndfile, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ; +</PRE> +<DL> +<DT>Return value: </DT> + <DD>Returns the previous double normalisation mode. +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_GET_NORM_FLOAT"></A> +<H2><BR><B>SFC_GET_NORM_FLOAT</B></H2> +<P> +Retrieve the current float normalisation mode. +</P> +<P> +Parameters: +</P> +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_GET_NORM_FLOAT + data : NULL + datasize : anything +</PRE> +<P> +Example: +</P> +<PRE> + normalisation = sf_command (sndfile, SFC_GET_NORM_FLOAT, NULL, 0) ; +</PRE> +<DL> +<DT>Return value: </DT> + <DD>Returns TRUE if normalisation is on and FALSE otherwise. +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_GET_NORM_DOUBLE"></A> +<H2><BR><B>SFC_GET_NORM_DOUBLE</B></H2> +<P> +Retrieve the current float normalisation mode. +</P> +<P> +Parameters: +</P> +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_GET_NORM_DOUBLE + data : NULL + datasize : anything +</PRE> +<P> +Example: +</P> +<PRE> + normalisation = sf_command (sndfile, SFC_GET_NORM_DOUBLE, NULL, 0) ; +</PRE> +<DL> +<DT>Return value: </DT> + <DD>Returns TRUE if normalisation is on and FALSE otherwise. +</DL> + + +<!-- ========================================================================= --> +<A NAME="SFC_SET_SCALE_FLOAT_INT_READ"></A> +<H2><BR><B>SFC_SET_SCALE_FLOAT_INT_READ</B></H2> +<P> +Set/clear the scale factor when integer (short/int) data is read from a file +containing floating point data. +</P> +<P> +Parameters: +</P> +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_SET_SCALE_FLOAT_INT_READ + data : NULL + datasize : TRUE or FALSE +</PRE> +<P> +Example: +</P> +<PRE> + sf_command (sndfile, SFC_SET_SCALE_FLOAT_INT_READ, NULL, SF_TRUE) ; +</PRE> +<DL> +<DT>Return value: </DT> + <DD>Returns the previous SFC_SET_SCALE_FLOAT_INT_READ setting for this file. +</DL> + + +<!-- ========================================================================= --> +<A NAME="SFC_SET_SCALE_INT_FLOAT_WRITE"></A> +<H2><BR><B>SFC_SET_SCALE_INT_FLOAT_WRITE</B></H2> +<P> +Set/clear the scale factor when integer (short/int) data is written to a file +as floating point data. +</P> +<P> +Parameters: +</P> +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_SET_SCALE_FLOAT_INT_READ + data : NULL + datasize : TRUE or FALSE +</PRE> +<P> +Example: +</P> +<PRE> + sf_command (sndfile, SFC_SET_SCALE_INT_FLOAT_WRITE, NULL, SF_TRUE) ; +</PRE> +<DL> +<DT>Return value: </DT> + <DD>Returns the previous SFC_SET_SCALE_INT_FLOAT_WRITE setting for this file. +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_GET_SIMPLE_FORMAT_COUNT"></A> +<H2><BR><B>SFC_GET_SIMPLE_FORMAT_COUNT</B></H2> +<P> +Retrieve the number of simple formats supported by libsndfile. +</P> +<P> +Parameters: +</P> +<PRE> + sndfile : Not used. + cmd : SFC_GET_SIMPLE_FORMAT_COUNT + data : a pointer to an int + datasize : sizeof (int) +</PRE> +<P> +Example: +</P> +<PRE> + int count ; + sf_command (sndfile, SFC_GET_SIMPLE_FORMAT_COUNT, &count, sizeof (int)) ; +</PRE> +<DL> +<DT>Return value: </DT> + <DD>0 +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_GET_SIMPLE_FORMAT"></A> +<H2><BR><B>SFC_GET_SIMPLE_FORMAT</B></H2> +<P> +Retrieve information about a simple format. +</P> +<P> +Parameters: +</P> +<PRE> + sndfile : Not used. + cmd : SFC_GET_SIMPLE_FORMAT + data : a pointer to an SF_FORMAT_INFO struct + datasize : sizeof (SF_FORMAT_INFO) +</PRE> +<P> +The SF_FORMAT_INFO struct is defined in <sndfile.h> as: +</P> +<PRE> + typedef struct + { int format ; + const char *name ; + const char *extension ; + } SF_FORMAT_INFO ; +</PRE> +<P> +When sf_command() is called with SF_GET_SIMPLE_FORMAT, the value of the format +field should be the format number (ie 0 <= format <= count value obtained using +SF_GET_SIMPLE_FORMAT_COUNT). +</P> +<P> +Example: +</P> +<PRE> + SF_FORMAT_INFO format_info ; + int k, count ; + + sf_command (sndfile, SFC_GET_SIMPLE_FORMAT_COUNT, &count, sizeof (int)) ; + + for (k = 0 ; k < count ; k++) + { format_info.format = k ; + sf_command (sndfile, SFC_GET_SIMPLE_FORMAT, &format_info, sizeof (format_info)) ; + printf ("%08x %s %s\n", format_info.format, format_info.name, format_info.extension) ; + } ; +</PRE> +<DL> +<DT>Return value: </DT> + <DD>0 on success and non-zero otherwise. + <DD>The value of the format field of the SF_FORMAT_INFO struct will be a value which + can be placed in the format field of an SF_INFO struct when a file is to be opened + for write. + <DD>The name field will contain a char* pointer to the name of the string, eg. "WAV (Microsoft 16 bit PCM)". + <DD>The extension field will contain the most commonly used file extension for that file type. +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_GET_FORMAT_INFO"></A> +<H2><BR><B>SFC_GET_FORMAT_INFO</B></H2> +<P> +Retrieve information about a major or subtype format. +</P> +<P> +Parameters: +</P> +<PRE> + sndfile : Not used. + cmd : SFC_GET_FORMAT_INFO + data : a pointer to an SF_FORMAT_INFO struct + datasize : sizeof (SF_FORMAT_INFO) +</PRE> +<P> +The SF_FORMAT_INFO struct is defined in <sndfile.h> as: +</P> +<PRE> + typedef struct + { int format ; + const char *name ; + const char *extension ; + } SF_FORMAT_INFO ; +</PRE> +<P> +When sf_command() is called with SF_GET_FORMAT_INFO, the format field is +examined and if (format & SF_FORMAT_TYPEMASK) is a valid format then the struct +is filled in with information about the given major type. +If (format & SF_FORMAT_TYPEMASK) is FALSE and (format & SF_FORMAT_SUBMASK) is a +valid subtype format then the struct is filled in with information about the given +subtype. +</P> +<P> +Example: +</P> +<PRE> + SF_FORMAT_INFO format_info ; + + format_info.format = SF_FORMAT_WAV ; + sf_command (sndfile, SFC_GET_FORMAT_INFO, &format_info, sizeof (format_info)) ; + printf ("%08x %s %s\n", format_info.format, format_info.name, format_info.extension) ; + + format_info.format = SF_FORMAT_ULAW ; + sf_command (sndfile, SFC_GET_FORMAT_INFO, &format_info, sizeof (format_info)) ; + printf ("%08x %s\n", format_info.format, format_info.name) ; +</PRE> +<DL> +<DT>Return value: </DT> + <DD>0 on success and non-zero otherwise. +</DL> +<!-- ========================================================================= --> +<A NAME="SFC_GET_FORMAT_MAJOR_COUNT"></A> +<H2><BR><B>SFC_GET_FORMAT_MAJOR_COUNT</B></H2> +<P> +Retrieve the number of major formats. +</P> +<P> +Parameters: +</P> +<PRE> + sndfile : Not used. + cmd : SFC_GET_FORMAT_MAJOR_COUNT + data : a pointer to an int + datasize : sizeof (int) +</PRE> +<P> +Example: +</P> +<PRE> + int count ; + sf_command (sndfile, SFC_GET_FORMAT_MAJOR_COUNT, &count, sizeof (int)) ; +</PRE> +<DL> +<DT>Return value: </DT> + <DD>0 +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_GET_FORMAT_MAJOR"></A> +<H2><BR><B>SFC_GET_FORMAT_MAJOR</B></H2> +<P> +Retrieve information about a major format type. +</P> +<P> +Parameters: +</P> +<PRE> + sndfile : Not used. + cmd : SFC_GET_FORMAT_MAJOR + data : a pointer to an SF_FORMAT_INFO struct + datasize : sizeof (SF_FORMAT_INFO) +</PRE> +<P> +Example: +</P> +<PRE> + SF_FORMAT_INFO format_info ; + int k, count ; + + sf_command (sndfile, SFC_GET_FORMAT_MAJOR_COUNT, &count, sizeof (int)) ; + + for (k = 0 ; k < count ; k++) + { format_info.format = k ; + sf_command (sndfile, SFC_GET_FORMAT_MAJOR, &format_info, sizeof (format_info)) ; + printf ("%08x %s %s\n", format_info.format, format_info.name, format_info.extension) ; + } ; +</PRE> +<P> +For a more comprehensive example, see the program list_formats.c in the examples/ +directory of the libsndfile source code distribution. +</P> +<DL> +<DT>Return value: </DT> + <DD>0 on success and non-zero otherwise. + <DD>The value of the format field will be one of the major format identifiers such as + SF_FORMAT_WAV or SF_FORMAT_AIFF. + <DD>The name field will contain a char* pointer to the name of the string, eg. "WAV (Microsoft)". + <DD>The extension field will contain the most commonly used file extension for that file type. +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_GET_FORMAT_SUBTYPE_COUNT"></A> +<H2><BR><B>SFC_GET_FORMAT_SUBTYPE_COUNT</B></H2> +<P> +Retrieve the number of subformats. +</P> +<P> +Parameters: +</P> +<PRE> + sndfile : Not used. + cmd : SFC_GET_FORMAT_SUBTYPE_COUNT + data : a pointer to an int + datasize : sizeof (int) +</PRE> +<P> +Example: +</P> +<PRE> + int count ; + sf_command (sndfile, SFC_GET_FORMAT_SUBTYPE_COUNT, &count, sizeof (int)) ; +</PRE> +<DL> +<DT>Return value: </DT> + <DD>0 +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_GET_FORMAT_SUBTYPE"></A> +<H2><BR><B>SFC_GET_FORMAT_SUBTYPE</B></H2> +<P> +Enumerate the subtypes (this function does not translate a subtype into +a string describing that subtype). +A typical use case might be retrieving a string description of all subtypes +so that a dialog box can be filled in. +</P> +<P> + +</P> +<P> +Parameters: +</P> +<PRE> + sndfile : Not used. + cmd : SFC_GET_FORMAT_SUBTYPE + data : a pointer to an SF_FORMAT_INFO struct + datasize : sizeof (SF_FORMAT_INFO) +</PRE> +<P> +Example 1: Retrieve all sybtypes supported by the WAV format. +</P> +<PRE> + SF_FORMAT_INFO format_info ; + int k, count ; + + sf_command (sndfile, SFC_GET_FORMAT_SUBTYPE_COUNT, &count, sizeof (int)) ; + + for (k = 0 ; k < count ; k++) + { format_info.format = k ; + sf_command (sndfile, SFC_GET_FORMAT_SUBTYPE, &format_info, sizeof (format_info)) ; + if (! sf_format_check (format_info.format | SF_FORMAT_WAV)) + continue ; + printf ("%08x %s\n", format_info.format, format_info.name) ; + } ; +</PRE> +<P> +Example 2: Print a string describing the SF_FORMAT_PCM_16 subtype. +</P> +<PRE> + SF_FORMAT_INFO format_info ; + int k, count ; + + sf_command (sndfile, SFC_GET_FORMAT_SUBTYPE_COUNT, &count, sizeof (int)) ; + + for (k = 0 ; k < count ; k++) + { format_info.format = k ; + sf_command (sndfile, SFC_GET_FORMAT_SUBTYPE, &format_info, sizeof (format_info)) ; + if (format_info.format == SF_FORMAT_PCM_16) + { printf ("%08x %s\n", format_info.format, format_info.name) ; + break ; + } ; + } ; +</PRE> +<P> +For a more comprehensive example, see the program list_formats.c in the examples/ +directory of the libsndfile source code distribution. +</P> +<DL> +<DT>Return value: </DT> + <DD>0 on success and non-zero otherwise. + <DD>The value of the format field will be one of the major format identifiers such as + SF_FORMAT_WAV or SF_FORMAT_AIFF. + <DD>The name field will contain a char* pointer to the name of the string; for instance + "WAV (Microsoft)" or "AIFF (Apple/SGI)". + <DD>The extension field will be a NULL pointer. +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_SET_ADD_PEAK_CHUNK"></A> +<H2><BR><B>SFC_SET_ADD_PEAK_CHUNK</B></H2> +<P> +By default, WAV and AIFF files which contain floating point data (subtype SF_FORMAT_FLOAT +or SF_FORMAT_DOUBLE) have a PEAK chunk. +By using this command, the addition of a PEAK chunk can be turned on or off. +</P> +<P> +Note : This call must be made before any data is written to the file. +</P> +<P> +Parameters: +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_SET_ADD_PEAK_CHUNK + data : Not used (should be NULL) + datasize : TRUE or FALSE. +</PRE> +<P> +Example: +</P> +<PRE> + /* Turn on the PEAK chunk. */ + sf_command (sndfile, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_TRUE) ; + + /* Turn off the PEAK chunk. */ + sf_command (sndfile, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_FALSE) ; +</PRE> +<DL> +<DT>Return value:</DT> +<DD>Returns SF_TRUE if the peak chunk will be written after this call. +<DD>Returns SF_FALSE if the peak chunk will not be written after this call. +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_UPDATE_HEADER_NOW"></A> +<H2><BR><B>SFC_UPDATE_HEADER_NOW</B></H2> +<P> +The header of an audio file is normally written by libsndfile when the file is +closed using <B>sf_close()</B>. +</P> +<P> +There are however situations where large files are being generated and it would +be nice to have valid data in the header before the file is complete. +Using this command will update the file header to reflect the amount of data written +to the file so far. +Other programs opening the file for read (before any more data is written) will +then read a valid sound file header. +</P> +<P> +Parameters: +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_UPDATE_HEADER_NOW + data : Not used (should be NULL) + datasize : Not used. +</PRE> +<P> +Example: +</P> +<PRE> + /* Update the header now. */ + sf_command (sndfile, SFC_UPDATE_HEADER_NOW, NULL, 0) ; +</PRE> +<DL> +<DT>Return value:</DT> +<DD>0 +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_SET_UPDATE_HEADER_AUTO"></A> +<H2><BR><B>SFC_SET_UPDATE_HEADER_AUTO</B></H2> +<P> +Similar to SFC_UPDATE_HEADER_NOW but updates the header at the end of every call +to the <B>sf_write*</B> functions. +</P> +<P> +Parameters: +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_UPDATE_HEADER_NOW + data : Not used (should be NULL) + datasize : SF_TRUE or SF_FALSE +</PRE> +<P> +Example: +</P> +<PRE> + /* Turn on auto header update. */ + sf_command (sndfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) ; + + /* Turn off auto header update. */ + sf_command (sndfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_FALSE) ; +</PRE> +<DL> +<DT>Return value:</DT> +<DD>TRUE if auto update header is now on; FALSE otherwise. +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_FILE_TRUNCATE"></A> +<H2><BR><B>SFC_FILE_TRUNCATE</B></H2> +<P> +Truncate a file that was opened for write or read/write. +</P> +<P> +Parameters: +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_FILE_TRUNCATE + data : A pointer to an sf_count_t. + datasize : sizeof (sf_count_t) +</PRE> + +<P> +Truncate the file to the number of frames specified by the sf_count_t pointed +to by data. +After this command, both the read and the write pointer will be +at the new end of the file. +This command will fail (returning non-zero) if the requested truncate position +is beyond the end of the file. +</P> +<P> +Example: +</P> +<PRE> + /* Truncate the file to a length of 20 frames. */ + sf_count_t frames = 20 ; + sf_command (sndfile, SFC_FILE_TRUNCATE, &frames, sizeof (frames)) ; +</PRE> +<DL> +<DT>Return value:</DT> + <DD>Zero on sucess, non-zero otherwise. +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_SET_RAW_START_OFFSET"></A> +<H2><BR><B>SFC_SET_RAW_START_OFFSET</B></H2> +<P> +Change the data start offset for files opened up as SF_FORMAT_RAW. +</P> +<P> +Parameters: +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_SET_RAW_START_OFFSET + data : A pointer to an sf_count_t. + datasize : sizeof (sf_count_t) +</PRE> + +<P> +For a file opened as format SF_FORMAT_RAW, set the data offset to the value +given by data. +</P> +<P> +Example: +</P> +<PRE> + /* Reset the data offset to 5 bytes from the start of the file. */ + sf_count_t offset = 5 ; + sf_command (sndfile, SFC_SET_RAW_START_OFFSET, &offset, sizeof (offset)) ; +</PRE> +<DL> +<DT>Return value:</DT> + <DD>Zero on success, non-zero otherwise. +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_SET_CLIPPING"></A> +<H2><BR><B>SFC_SET_CLIPPING</B></H2> +<P> +Turn on/off automatic clipping when doing floating point to integer conversion. +</P> +<P> +Parameters: +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_SET_CLIPPING + data : NULL + datasize : SF_TRUE or SF_FALSE. +</PRE> + +<P> +Turn on (datasize == SF_TRUE) or off (datasize == SF_FALSE) clipping. +</P> +<P> +Example: +</P> +<PRE> + sf_command (sndfile, SFC_SET_CLIPPING, NULL, SF_TRUE) ; +</PRE> +<DL> +<DT>Return value:</DT> + <DD>Clipping mode (SF_TRUE or SF_FALSE). +</DL> + + +<!-- ========================================================================= --> +<A NAME="SFC_GET_CLIPPING"></A> +<H2><BR><B>SFC_GET_CLIPPING</B></H2> +<P> +Turn on/off automatic clipping when doing floating point to integer conversion. +</P> +<P> +Parameters: +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_GET_CLIPPING + data : NULL + datasize : 0 +</PRE> + +<P> +Retrieve the current cliiping setting. +</P> +<P> +Example: +</P> +<PRE> + sf_command (sndfile, SFC_GET_CLIPPING, NULL, 0) ; +</PRE> +<DL> +<DT>Return value:</DT> + <DD>Clipping mode (SF_TRUE or SF_FALSE). +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_GET_EMBED_FILE_INFO"></A> +<H2><BR><B>SFC_GET_EMBED_FILE_INFO</B></H2> +<P> +Get the file offset and file length of a file enbedded within another +larger file. +</P> +<P> +Parameters: +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_GET_CLIPPING + data : a pointer to an SF_EMBED_FILE_INFO struct + datasize : sizeof (SF_EMBED_FILE_INFO) +</PRE> +<P> +The SF_EMBED_FILE_INFO struct is defined in <sndfile.h> as: +</P> +<PRE> + typedef struct + { sf_count_t offset ; + sf_count_t length ; + } SF_EMBED_FILE_INFO ; +</PRE> +<DL> +<DT>Return value: </DT> + <DD>0 on success and non-zero otherwise. + <DD>The value of the offset field of the SF_EMBED_FILE_INFO struct will be + the offsets in bytes from the start of the outer file to the start of + the audio file. + <DD>The value of the offset field of the SF_EMBED_FILE_INFO struct will be + the length in bytes of the embedded file. +</DL> + + + +<!-- ========================================================================= --> +<A NAME="SFC_WAVEX_GET_AMBISONIC"></A> +<H2><BR><B>SFC_WAVEX_GET_AMBISONIC</B></H2> +<P> +Test if the current file has the GUID of a WAVEX file for any of the Ambisonic +formats. +</P> +<P> +Parameters: +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_WAVEX_GET_AMBISONIC + data : NULL + datasize : 0 +</PRE> +<P> + The Ambisonic WAVEX formats are defined here : + <A HREF="http://dream.cs.bath.ac.uk/researchdev/wave-ex/bformat.html"> + http://dream.cs.bath.ac.uk/researchdev/wave-ex/bformat.html</A>. +</P> +<DL> +<DT>Return value: </DT> + <DD>SF_AMBISONIC_NONE or SF_AMBISONIC_B_FORMAT or zero if the file format + does not support ambisonic formats. +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_WAVEX_SET_AMBISONIC"></A> +<H2><BR><B>SFC_WAVEX_SET_AMBISONIC</B></H2> +<P> +Set the GUID of a new WAVEX file to indicate an Ambisonics format. +</P> +<P> +Parameters: +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_WAVEX_SET_AMBISONIC + data : NULL + datasize : SF_AMBISONIC_NONE or SF_AMBISONIC_B_FORMAT +</PRE> +<P> +Turn on (SF_AMBISONIC_B_FORMAT) or off (SF_AMBISONIC_NONE) encoding. +This command is currently only supported for files with SF_FORMAT_WAVEX format. +</P> +<P> + The Ambisonic WAVEX formats are defined here : + <A HREF="http://dream.cs.bath.ac.uk/researchdev/wave-ex/bformat.html"> + http://dream.cs.bath.ac.uk/researchdev/wave-ex/bformat.html</A>. +</P> +<DL> +<DT>Return value: </DT> + <DD>Return the ambisonic value that has just been set or zero if the file + format does not support ambisonic encoding. +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_SET_VBR_ENCODING_QUALITY"></A> +<H2><BR><B>SFC_SET_VBR_ENCODING_QUALITY</B></H2> +<P> +Set the the Variable Bit Rate encoding quality. +The encoding quality value should be between 0.0 (lowest quality) and 1.0 +(highest quality). +</P> +<P> +Parameters: +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_SET_VBR_ENCODING_QUALITY + data : A pointer to a double value + datasize : sizeof (double) +</PRE> +<P> +The command must be sent before any audio data is written to the file. +</P> +<P> +</P> +<DL> +<DT>Return value: </DT> + <DD>Zero on success, non-zero otherwise. +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_RAW_NEEDS_ENDSWAP"></A> +<H2><BR><B>SFC_RAW_NEEDS_ENDSWAP</B></H2> +<P> +Determine if raw data read using + <a href="api.html#raw"> + sf_read_raw</a> +needs to be end swapped on the host CPU. +</P> +<P> +For instance, will return SF_TRUE on when reading WAV containing +SF_FORMAT_PCM_16 data on a big endian machine and SF_FALSE on a little endian +machine. +</P> +<P> +Parameters: +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_RAW_NEEDS_ENDSWAP + data : NULL + datasize : 0 +</PRE> + +<DL> +<DT>Return value: </DT> + <DD>SF_TRUE or SF_FALSE +</DL> + + +<!-- ========================================================================= --> +<A NAME="SFC_GET_BROADCAST_INFO"></A> +<H2><BR><B>SFC_GET_BROADCAST_INFO</B></H2> +<P> +Retrieve the Broadcast Extension Chunk from WAV (and related) files. +</P> +<p> +Parameters: +</p> +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_GET_BROADCAST_INFO + data : a pointer to an SF_BROADCAST_INFO struct + datasize : sizeof (SF_BROADCAST_INFO) +</PRE> +<P> +The SF_BROADCAST_INFO struct is defined in <sndfile.h> as: +</P> +<PRE> + typedef 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 [256] ; + } SF_BROADCAST_INFO ; +</PRE> + +<DL> +<DT>Return value: </DT> + <DD>SF_TRUE if the file contained a Broadcast Extension chunk or SF_FALSE + otherwise. +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_SET_BROADCAST_INFO"></A> +<H2><BR><B>SFC_SET_BROADCAST_INFO</B></H2> +<P> +Set the Broadcast Extension Chunk for WAV (and related) files. +</P> +<p> +Parameters: +</p> +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_SET_BROADCAST_INFO + data : a pointer to an SF_BROADCAST_INFO struct + datasize : sizeof (SF_BROADCAST_INFO) +</PRE> + +<DL> +<DT>Return value: </DT> + <DD>SF_TRUE if setting the Broadcast Extension chunk was successful and SF_FALSE + otherwise. +</DL> +<!-- ========================================================================= --> + +<A NAME="SFC_GET_LOOP_INFO"></A> +<H2><BR><B>SFC_GET_LOOP_INFO</B></H2> +<P> +Retrieve loop information for file including time signature, length in +beats and original MIDI base note +</P> +<p> +Parameters: +</p> +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_GET_LOOP_INFO + data : a pointer to an SF_LOOP_INFO struct + datasize : sizeof (SF_LOOP_INFO) +</PRE> +<P> +The SF_BROADCAST_INFO struct is defined in <sndfile.h> as: +</P> +<PRE> + 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 ; +</PRE> +<P> +Example: +</P> +<PRE> + SF_LOOP_INFO loop; + sf_command (sndfile, SFC_GET_LOOP_INFO, &loop, sizeof (loop)) ; +</PRE> +<DL> +<DT>Return value:</DT> + <DD>SF_TRUE if the file header contains loop information for the file. + SF_FALSE otherwise. +</DL> + +<!-- ========================================================================= --> + + +<A NAME="SFC_GET_INSTRUMENT"></A> +<H2><BR><B>SFC_GET_INSTRUMENT</B></H2> +<P> +Retrieve instrument information from file including MIDI base note, +keyboard mapping and looping informations(start/stop and mode). +</P> +<p> +Parameters: +</p> +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_GET_INSTRUMENT + data : a pointer to an SF_INSTRUMENT struct + datasize : sizeof (SF_INSTRUMENT) +</PRE> + +<P> +The SF_INSTRUMENT struct is defined in <sndfile.h> as: +</P> +<PRE> + 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 ; +</PRE> + +<P> +Example: +</P> +<PRE> + SF_INSTRUMENT inst ; + sf_command (sndfile, SFC_GET_INSTRUMENT, &inst, sizeof (inst)) ; +</PRE> +<DL> +<DT>Return value:</DT> + <dd>SF_TRUE if the file header contains instrument information for the + file. SF_FALSE otherwise. +</DL> + +<!-- ========================================================================= --> + + +<A NAME="SFC_SET_INSTRUMENT"></A> +<H2><BR><B>SFC_SET_INSTRUMENT</B></H2> +<P> +Set the instrument information for the file. +</P> +<p> +Parameters: +</p> +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_GET_INSTRUMENT + data : a pointer to an SF_INSTRUMENT struct + datasize : sizeof (SF_INSTRUMENT) +</PRE> +<P> +Example: +</P> +<PRE> + SF_INSTRUMENT inst ; + sf_command (sndfile, SFC_SET_INSTRUMENT, &inst, sizeof (inst)) ; +</PRE> +<DL> +<DT>Return value:</DT> + <dd>SF_TRUE if the file header contains instrument information for the + file. SF_FALSE otherwise. +</DL> + +<!-- ========================================================================= --> + + +<A NAME="SFC_SET_VBR_ENCODING_QUALITY"></A> +<H2><BR><B>SFC_SET_VBR_ENCODING_QUALITY</B></H2> +<P> +Set the Variable Bite Rate encoding quality. +Currenly only implemented fro Ogg/Vorbis files. +</P> +<p> +Parameters: +</p> +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_SET_VBR_ENCODING_QUALITY + data : a pointer to double specifing VBR quality + datasize : sizeof (double) +</PRE> +<P> +Example: +</P> +<PRE> + double quality = 0.5 ; + sf_command (sndfile, SFC_SET_VBR_ENCODING_QUALITY, &quality, sizeof (double)) ; +</PRE> +<DL> +<DT>Return value:</DT> + <dd>SF_TRUE if VBR encoding quality was set. + SF_FALSE otherwise. +</DL> + +<!-- ========================================================================= --> + + +<HR> +<P> + The libsndfile home page is here : + <A HREF="http://www.mega-nerd.com/libsndfile/"> + http://www.mega-nerd.com/libsndfile/</A>. +<BR> +Version : 1.0.25 +</P> + +</BODY> +</HTML> diff --git a/doc/dither.html b/doc/dither.html new file mode 100644 index 0000000..01a416f --- /dev/null +++ b/doc/dither.html @@ -0,0 +1,1017 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> + +<HEAD> + <TITLE> + libsndfile : the sf_command function. + </TITLE> + <META NAME="Author" CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)"> + <!-- Another version at the bottom of the page. --> + <META NAME="Description" CONTENT="The libsndfile API."> + <META NAME="Keywords" CONTENT="WAV AIFF AU libsndfile sound audio dsp Linux"> + <LINK REL="stylesheet" HREF="libsndfile.css" TYPE="text/css" MEDIA="all"> + <LINK REL="stylesheet" HREF="print.css" TYPE="text/css" MEDIA="print"> +</HEAD> + +<BODY> + +<H1><B>sf_command</B></H1> +<PRE> + + int sf_command (SNDFILE *sndfile, int cmd, void *data, int datasize) ; +</PRE> +<P> + This function allows the caller to retrieve information from or change aspects of the + library behaviour. + Examples include retrieving a string containing the library version or changing the + scaling applied to floating point sample data during read and write. + Most of these operations are performed on a per-file basis. +</P> +<P> + The cmd parameter is a integer identifier which is defined in <sndfile.h>. + All of the valid command identifiers have names begining with "SFC_". + Data is passed to and returned from the library by use of a void pointer. + The library will not read or write more than datasize bytes from the void pointer. + For some calls no data is required in which case data should be NULL and datasize + may be used for some other purpose. +</P> +<P> + The available commands are as follows: +</P> + +<CENTER> +<TABLE BORDER="0" WIDTH="90%" CELLPADDING="4"> +<TR> + <TD><A HREF="#SFC_GET_LIB_VERSION">SFC_GET_LIB_VERSION</A></TD> + <TD>Retrieve the version of the library.</TD> +</TR> +<TR> + <TD><A HREF="#SFC_GET_LOG_INFO">SFC_GET_LOG_INFO</A></TD> + <TD>Retrieve the internal per-file operation log.</TD> +</TR> +<TR> + <TD><A HREF="#SFC_CALC_SIGNAL_MAX">SFC_CALC_SIGNAL_MAX</A></TD> + <TD>Retrieve the measured maximum signal value.</TD> +</TR> +<TR> + <TD><A HREF="#SFC_CALC_NORM_SIGNAL_MAX">SFC_CALC_NORM_SIGNAL_MAX</A></TD> + <TD>Retrieve the measured normalised maximum signal value.</TD> +</TR> +<TR> + <TD><A HREF="#SFC_CALC_MAX_ALL_CHANNELS">SFC_CALC_MAX_ALL_CHANNELS</A></TD> + <TD>Calculate peaks for all channels.</TD> +</TR> +<TR> + <TD><A HREF="#SFC_CALC_NORM_MAX_ALL_CHANNELS">SFC_CALC_NORM_MAX_ALL_CHANNELS</A></TD> + <TD>Calculate normalised peaks for all channels.</TD> +</TR> + +<TR> + <TD><A HREF="#SFC_SET_NORM_FLOAT">SFC_SET_NORM_FLOAT</A></TD> + <TD>Modify the normalisation behaviour of the floating point reading and writing functions.</TD> +</TR> +<TR> + <TD><A HREF="#SFC_SET_NORM_DOUBLE">SFC_SET_NORM_DOUBLE</A></TD> + <TD>Modify the normalisation behaviour of the double precision floating point reading and writing functions.</TD> +</TR> +<TR> + <TD><A HREF="#SFC_GET_NORM_FLOAT">SFC_GET_NORM_FLOAT</A></TD> + <TD>Retrieve the current normalisation behaviour of the floating point reading and writing functions.</TD> +</TR> +<TR> + <TD><A HREF="#SFC_GET_NORM_DOUBLE">SFC_GET_NORM_DOUBLE</A></TD> + <TD>Retrieve the current normalisation behaviour of the double precision floating point reading and writing functions.</TD> +</TR> +<TR> + <TD><A HREF="#SFC_GET_SIMPLE_FORMAT_COUNT">SFC_GET_SIMPLE_FORMAT_COUNT</A></TD> + <TD>Retrieve the number of simple formats supported by libsndfile.</TD> +</TR> +<TR> + <TD><A HREF="#SFC_GET_SIMPLE_FORMAT">SFC_GET_SIMPLE_FORMAT</A></TD> + <TD>Retrieve information about a simple format.</TD> +</TR> + +<TR> + <TD><A HREF="#SFC_GET_FORMAT_INFO">SFC_GET_FORMAT_INFO</A></TD> + <TD>Retrieve information about a major or subtype format.</TD> +</TR> + +<TR> + <TD><A HREF="#SFC_GET_FORMAT_MAJOR_COUNT">SFC_GET_FORMAT_MAJOR_COUNT</A></TD> + <TD>Retrieve the number of major formats.</TD> +</TR> +<TR> + <TD><A HREF="#SFC_GET_FORMAT_MAJOR">SFC_GET_FORMAT_MAJOR</A></TD> + <TD>Retrieve information about a major format type.</TD> +</TR> +<TR> + <TD><A HREF="#SFC_GET_FORMAT_SUBTYPE_COUNT">SFC_GET_FORMAT_SUBTYPE_COUNT</A></TD> + <TD>Retrieve the number of subformats.</TD> +</TR> +<TR> + <TD><A HREF="#SFC_GET_FORMAT_SUBTYPE">SFC_GET_FORMAT_SUBTYPE</A></TD> + <TD>Retrieve information about a subformat.</TD> +</TR> + +<TR> + <TD><A HREF="#SFC_SET_ADD_PEAK_CHUNK">SFC_SET_ADD_PEAK_CHUNK</A></TD> + <TD>Switch the code for adding the PEAK chunk to WAV and AIFF files on or off.</TD> +</TR> + +<TR> + <TD><A HREF="#SFC_UPDATE_HEADER_NOW">SFC_UPDATE_HEADER_NOW</A></TD> + <TD>Used when a file is open for write, this command will update the file + header to reflect the data written so far.</TD> +</TR> +<TR> + <TD><A HREF="#SFC_SET_UPDATE_HEADER_AUTO">SFC_SET_UPDATE_HEADER_AUTO</A></TD> + <TD>Used when a file is open for write, this command will cause the file header + to be updated after each write to the file.</TD> +</TR> + +<TR> + <TD><A HREF="#SFC_FILE_TRUNCATE">SFC_FILE_TRUNCATE</A></TD> + <TD>Truncate a file open for write or for read/write.</TD> +</TR> + +<TR> + <TD><A HREF="#SFC_SET_RAW_START_OFFSET">SFC_SET_RAW_START_OFFSET</A></TD> + <TD>Change the data start offset for files opened up as SF_FORMAT_RAW.</TD> +</TR> + + + +<!-- +<TR> + <TD><A HREF="#add-dither">add dither</A></TD> + <TD>Add dither to output on write.</TD> +</TR> +--> +</TABLE> +</CENTER> + +<BR><BR> + +<HR> + +<!-- ========================================================================= --> +<A NAME="SFC_GET_LIB_VERSION"></A> +<H2><BR><B>SFC_GET_LIB_VERSION</B></H2> +<P> +Retrieve the version of the library as a string. +</P> +<P> +Parameters: +<PRE> + sndfile : Not used + cmd : SFC_GET_LIB_VERSION + data : A pointer to a char buffer + datasize : The size of the the buffer +</PRE> +<P> +Example: +</P> +<PRE> + char buffer [128] ; + sf_command (NULL, SFC_GET_LIB_VERSION, buffer, sizeof (buffer)) ; +</PRE> + +<DL> +<DT>Return value:</DT> + <DD><DD>This call will return the length of the retrieved version string. +</DL> +<DL> +<DT>Notes:</DT> +<DD> +The string returned in the buffer passed to this function will not overflow +the buffer and will always be null terminated . +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_GET_LOG_INFO"></A> +<H2><BR><B>SFC_GET_LOG_INFO</B></H2> +<P> +Retrieve the log buffer generated when opening a file as a string. This log +buffer can often contain a good reason for why libsndfile failed to open a +particular file. +</P> +<P> +Parameters: +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_GET_LOG_INFO + data : A pointer to a char buffer + datasize : The size of the the buffer +</PRE> +<P> +Example: +</P> +<PRE> + char buffer [2048] ; + sf_command (sndfile, SFC_GET_LOG_INFO, buffer, sizeof (buffer)) ; +</PRE> + +<DL> +<DT>Return value:</DT> + <DD><DD>This call will return the length of the retrieved version string. +</DL> +<DL> +<DT>Notes:</DT> +<DD> +The string returned in the buffer passed to this function will not overflow +the buffer and will always be null terminated . +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_CALC_SIGNAL_MAX"></A> +<H2><BR><B>SFC_CALC_SIGNAL_MAX</B></H2> +<P> +Retrieve the measured maximum signal value. This involves reading through +the whole file which can be slow on large files. +</P> +<P> +Parameters: +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_CALC_SIGNAL_MAX + data : A pointer to a double + datasize : sizeof (double) +</PRE> +<P> +Example: +</P> +<PRE> + double max_val ; + sf_command (sndfile, SFC_CALC_SIGNAL_MAX, &max_val, sizeof (max_val)) ; +</PRE> + +<DL> +<DT>Return value:</DT> + <DD><DD>Zero on success, non-zero otherwise. +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_CALC_NORM_SIGNAL_MAX"></A> +<H2><BR><B>SFC_CALC_NORM_SIGNAL_MAX</B></H2> +<P> +Retrieve the measured normailised maximum signal value. This involves reading +through the whole file which can be slow on large files. +</P> +<P> +Parameters: +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_CALC_NORM_SIGNAL_MAX + data : A pointer to a double + datasize : sizeof (double) +</PRE> +<P> +Example: +</P> +<PRE> + double max_val ; + sf_command (sndfile, SFC_CALC_NORM_SIGNAL_MAX, &max_val, sizeof (max_val)) ; +</PRE> + +<DL> +<DT>Return value:</DT> + <DD><DD>Zero on success, non-zero otherwise. +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_CALC_MAX_ALL_CHANNELS"></A> +<H2><BR><B>SFC_CALC_MAX_ALL_CHANNELS</B></H2> +<P> +Calculate peaks for all channels. This involves reading through +the whole file which can be slow on large files. +</P> +<P> +Parameters: +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_CALC_MAX_ALL_CHANNELS + data : A pointer to a double + datasize : sizeof (double) * number_of_channels +</PRE> +<P> +Example: +</P> +<PRE> + double peaks [number_of_channels] ; + sf_command (sndfile, SFC_CALC_MAX_ALL_CHANNELS, peaks, sizeof (peaks)) ; +</PRE> +<DL> +<DT>Return value:</DT> + <DD>Zero if peaks have been calculated successfully and non-zero otherwise. +</DL> + + +<!-- ========================================================================= --> +<A NAME="SFC_CALC_NORM_MAX_ALL_CHANNELS"></A> +<H2><BR><B>SFC_CALC_NORM_MAX_ALL_CHANNELS</B></H2> +<P> +Calculate normalised peaks for all channels. This involves reading through +the whole file which can be slow on large files. +</P> +<P> +Parameters: +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_CALC_NORM_MAX_ALL_CHANNELS + data : A pointer to a double + datasize : sizeof (double) * number_of_channels +</PRE> +<P> +Example: +</P> +<PRE> + double peaks [number_of_channels] ; + sf_command (sndfile, SFC_CALC_NORM_MAX_ALL_CHANNELS, peaks, sizeof (peaks)) ; +</PRE> +<DL> +<DT>Return value:</DT> + <DD>Zero if peaks have been calculated successfully and non-zero otherwise. +</DL> + + + + + +<!-- ========================================================================= --> +<!-- +<A NAME="read-text"></A> +<H2><BR><B>Read text</B></H2> +<P> +Many sound file formats contain allow the inclusion of a text string describing the nature +of the file. If a file contains such a string, this functions will return it to the caller. +</P> +<P> +It should be noted that the way the string is added to the file is file format dependant +but that any string added with <A HREF="#write-text">write text</A> will be returned by +<A HREF="#read-text">read text</A>. +</P> +<P> +<P> +Parameters: +</P> +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : The text string "read text". + data : A pointer to a char buffer. + datasize : The size of the the buffer. +</PRE> +<P> +Example: +</P> +<PRE> + char buffer [128] ; + sf_command (sndfile, "read text", buffer, sizeof (buffer)) ; +</PRE> +<DL> +<DT>Return value:</DT> +<DD>If a text string is found, this call will return the length of the retrieved text + string. + <DD>If no text string is found, zero will be returned and the first element in the + buffer will be set to the null character. +<DT>Notes:</DT> +<DD>The string returned in the buffer passed to this function will not overflow + the buffer and will be correctly null terminated . +</DL> + +<A NAME="write-text"></A> +<H2><BR><B>Write text</B></H2> +<P> +Add a text string to a file. The text string added can be retrieved when the file is +read using <A HREF="#read-text">read text</A>. +</P> +<P> +Parameters: +</P> +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : The text string "write text". + data : A pointer to the string to be added. + datasize : Not used. +</PRE> +<P> +Example: +</P> +<PRE> + char text = "The sound of one hand clapping." ; + sf_command (sndfile, "write text", text, strlen (text)) ; +</PRE> +<DL> +<DT>Return value: </DT> + <DD>If the current file format allows the addition of text strings, the string will + be added and the length of the string will be returned. + <DD>If the file format does not allow the addition of text strings zero will be returned. + <DD>If this function is called after the file is openned but before +</DL> +--> + + +<!-- ========================================================================= --> +<A NAME="SFC_SET_NORM_FLOAT"></A> +<H2><BR><B>SFC_SET_NORM_FLOAT</B></H2> +<P> +This command only affects data read from or written to using the floating point functions: +</P> +<PRE> + size_t <A HREF="api.html#read">sf_read_float</A> (SNDFILE *sndfile, float *ptr, size_t items) ; + size_t <A HREF="api.html#readf">sf_readf_float</A> (SNDFILE *sndfile, float *ptr, size_t frames) ; + + size_t <A HREF="api.html#write">sf_write_float</A> (SNDFILE *sndfile, float *ptr, size_t items) ; + size_t <A HREF="api.html#writef">sf_writef_float</A> (SNDFILE *sndfile, float *ptr, size_t frames) ; +</PRE> +<P> +Parameters: +</P> +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_SET_NORM_FLOAT + data : NULL + datasize : SF_TRUE or SF_FALSE +</PRE> +<P> +For read operations setting normalisation to SF_TRUE means that the data from all +subsequent reads will be be normalised to the range [-1.0, 1.0]. +</P> +<P> +For write operations, setting normalisation to SF_TRUE means than all data supplied +to the float write functions should be in the range [-1.0, 1.0] and will be scaled +for the file format as necessary. +</P> +<P> +For both cases, setting normalisation to SF_FALSE means that no scaling will take place. +</P> +<P> +Example: +</P> +<PRE> + sf_command (sndfile, SFC_SET_NORM_FLOAT, NULL, SF_TRUE) ; + + sf_command (sndfile, SFC_SET_NORM_FLOAT, NULL, SF_FALSE) ; +</PRE> +<DL> +<DT>Return value: </DT> + <DD>Returns 1 on success or 0 for failure. +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_SET_NORM_DOUBLE"></A> +<H2><BR><B>SFC_SET_NORM_DOUBLE</B></H2> +<P> +This command only affects data read from or written to using the double precision +floating point functions: +</P> +<PRE> + size_t <A HREF="api.html#read">sf_read_double</A> (SNDFILE *sndfile, double *ptr, size_t items) ; + size_t <A HREF="api.html#readf">sf_readf_double</A> (SNDFILE *sndfile, double *ptr, size_t frames) ; + + size_t <A HREF="api.html#write">sf_write_double</A> (SNDFILE *sndfile, double *ptr, size_t items) ; + size_t <A HREF="api.html#writef">sf_writef_double</A> (SNDFILE *sndfile, double *ptr, size_t frames) ; +</PRE> +<P> +Parameters: +</P> +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_SET_NORM_DOUBLE + data : NULL + datasize : SF_TRUE or SF_FALSE +</PRE> +<P> +For read operations setting normalisation to SF_TRUE means that the data +from all subsequent reads will be be normalised to the range [-1.0, 1.0]. +</P> +<P> +For write operations, setting normalisation to SF_TRUE means than all data supplied +to the double write functions should be in the range [-1.0, 1.0] and will be scaled +for the file format as necessary. +</P> +<P> +For both cases, setting normalisation to SF_FALSE means that no scaling will take place. +</P> +<P> +Example: +</P> +<PRE> + sf_command (sndfile, SFC_SET_NORM_DOUBLE, NULL, SF_TRUE) ; + + sf_command (sndfile, SFC_SET_NORM_DOUBLE, NULL, SF_FALSE) ; +</PRE> +<DL> +<DT>Return value: </DT> + <DD>Returns 1 on success or 0 for failure. +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_GET_NORM_FLOAT"></A> +<H2><BR><B>SFC_GET_NORM_FLOAT</B></H2> +<P> +Retrieve the current float normalisation mode. +</P> +<P> +Parameters: +</P> +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_GET_NORM_FLOAT + data : NULL + datasize : anything +</PRE> +<P> +Example: +</P> +<PRE> + normalisation = sf_command (sndfile, SFC_GET_NORM_FLOAT, NULL, 0) ; +</PRE> +<DL> +<DT>Return value: </DT> + <DD>Returns TRUE if normaisation is on and FALSE otherwise. +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_GET_NORM_DOUBLE"></A> +<H2><BR><B>SFC_GET_NORM_DOUBLE</B></H2> +<P> +Retrieve the current float normalisation mode. +</P> +<P> +Parameters: +</P> +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_GET_NORM_DOUBLE + data : NULL + datasize : anything +</PRE> +<P> +Example: +</P> +<PRE> + normalisation = sf_command (sndfile, SFC_GET_NORM_DOUBLE, NULL, 0) ; +</PRE> +<DL> +<DT>Return value: </DT> + <DD>Returns TRUE if normalisation is on and FALSE otherwise. +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_GET_SIMPLE_FORMAT_COUNT"></A> +<H2><BR><B>SFC_GET_SIMPLE_FORMAT_COUNT</B></H2> +<P> +Retrieve the number of simple formats supported by libsndfile. +</P> +<P> +Parameters: +</P> +<PRE> + sndfile : Not used. + cmd : SFC_GET_SIMPLE_FORMAT_COUNT + data : a pointer to an int + datasize : sizeof (int) +</PRE> +<P> +Example: +</P> +<PRE> + int count ; + sf_command (sndfile, SFC_GET_SIMPLE_FORMAT_COUNT, &count, sizeof (int)) ; +</PRE> +<DL> +<DT>Return value: </DT> + <DD>0 +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_GET_SIMPLE_FORMAT"></A> +<H2><BR><B>SFC_GET_SIMPLE_FORMAT</B></H2> +<P> +Retrieve information about a simple format. +</P> +<P> +Parameters: +</P> +<PRE> + sndfile : Not used. + cmd : SFC_GET_SIMPLE_FORMAT + data : a pointer to an SF_FORMAT_INFO struct + datasize : sizeof (SF_FORMAT_INFO) +</PRE> +<P> +The SF_FORMAT_INFO struct is defined in <sndfile.h> as: +</P> +<PRE> + typedef struct + { int format ; + const char *name ; + const char *extension ; + } SF_FORMAT_INFO ; +</PRE> +<P> +When sf_command() is called with SF_GET_SIMPLE_FORMAT, the value of the format +field should be the format number (ie 0 <= format <= count value obtained using +SF_GET_SIMPLE_FORMAT_COUNT). +</P> +<P> +Example: +</P> +<PRE> + SF_FORMAT_INFO format_info ; + int k, count ; + + sf_command (sndfile, SFC_GET_SIMPLE_FORMAT_COUNT, &count, sizeof (int)) ; + + for (k = 0 ; k < count ; k++) + { format_info.format = k ; + sf_command (sndfile, SFC_GET_SIMPLE_FORMAT, &format_info, sizeof (format_info)) ; + printf ("%08x %s %s\n", format_info.format, format_info.name, format_info.extension) ; + } ; +</PRE> +<DL> +<DT>Return value: </DT> + <DD>0 on success and non-zero otherwise. + <DD>The value of the format field of the SF_FORMAT_INFO struct will be an value which + can be placed in the format field of an SF_INFO struct when a file is to be opened + for write. + <DD>The name field will contain a char* pointer to the name of the string ie "WAV (Microsoft 16 bit PCM)". + <DD>The extention field will contain the most commonly used file extension for that file type. +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_GET_FORMAT_INFO"></A> +<H2><BR><B>SFC_GET_FORMAT_INFO</B></H2> +<P> +Retrieve information about a major or subtype format. +</P> +<P> +Parameters: +</P> +<PRE> + sndfile : Not used. + cmd : SFC_GET_FORMAT_INFO + data : a pointer to an SF_FORMAT_INFO struct + datasize : sizeof (SF_FORMAT_INFO) +</PRE> +<P> +The SF_FORMAT_INFO struct is defined in <sndfile.h> as: +</P> +<PRE> + typedef struct + { int format ; + const char *name ; + const char *extension ; + } SF_FORMAT_INFO ; +</PRE> +<P> +When sf_command() is called with SF_GET_FORMAT_INFO, the format field is +examined and if (format & SF_FORMAT_TYPEMASK) is a valid format then the struct +is filled in with information about the given major type. +If (format & SF_FORMAT_TYPEMASK) is FALSE and (format & SF_FORMAT_SUBMASK) is a +valid subtype format then the struct is filled in with information about the given +subtype. +</P> +<P> +Example: +</P> +<PRE> + SF_FORMAT_INFO format_info ; + + format_info.format = SF_FORMAT_WAV ; + sf_command (sndfile, SFC_GET_FORMAT_INFO, &format_info, sizeof (format_info)) ; + printf ("%08x %s %s\n", format_info.format, format_info.name, format_info.extension) ; + + format_info.format = SF_FORMAT_ULAW ; + sf_command (sndfile, SFC_GET_FORMAT_INFO, &format_info, sizeof (format_info)) ; + printf ("%08x %s\n", format_info.format, format_info.name) ; +</PRE> +<DL> +<DT>Return value: </DT> + <DD>0 on success and non-zero otherwise. +</DL> +<!-- ========================================================================= --> +<A NAME="SFC_GET_FORMAT_MAJOR_COUNT"></A> +<H2><BR><B>SFC_GET_FORMAT_MAJOR_COUNT</B></H2> +<P> +Retrieve the number of major formats. +</P> +<P> +Parameters: +</P> +<PRE> + sndfile : Not used. + cmd : SFC_GET_FORMAT_MAJOR_COUNT + data : a pointer to an int + datasize : sizeof (int) +</PRE> +<P> +Example: +</P> +<PRE> + int count ; + sf_command (sndfile, SFC_GET_FORMAT_MAJOR_COUNT, &count, sizeof (int)) ; +</PRE> +<DL> +<DT>Return value: </DT> + <DD>0 +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_GET_FORMAT_MAJOR"></A> +<H2><BR><B>SFC_GET_FORMAT_MAJOR</B></H2> +<P> +Retrieve information about a major format type. +</P> +<P> +Parameters: +</P> +<PRE> + sndfile : Not used. + cmd : SFC_GET_FORMAT_MAJOR + data : a pointer to an SF_FORMAT_INFO struct + datasize : sizeof (SF_FORMAT_INFO) +</PRE> +<P> +Example: +</P> +<PRE> + SF_FORMAT_INFO format_info ; + int k, count ; + + sf_command (sndfile, SFC_GET_FORMAT_MAJOR_COUNT, &count, sizeof (int)) ; + + for (k = 0 ; k < count ; k++) + { format_info.format = k ; + sf_command (sndfile, SFC_GET_FORMAT_MAJOR, &format_info, sizeof (format_info)) ; + printf ("%08x %s %s\n", format_info.format, format_info.name, format_info.extension) ; + } ; +</PRE> +<P> +For a more comprehensive example, see the program list_formats.c in the examples/ +directory of the libsndfile source code distribution. +</P> +<DL> +<DT>Return value: </DT> + <DD>0 on success and non-zero otherwise. + <DD>The value of the format field will one of the major format identifiers suc as SF_FORMAT_WAV + SF_FORMAT_AIFF. + <DD>The name field will contain a char* pointer to the name of the string ie "WAV (Microsoft)". + <DD>The extention field will contain the most commonly used file extension for that file type. +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_GET_FORMAT_SUBTYPE_COUNT"></A> +<H2><BR><B>SFC_GET_FORMAT_SUBTYPE_COUNT</B></H2> +<P> +Retrieve the number of subformats. +</P> +<P> +Parameters: +</P> +<PRE> + sndfile : Not used. + cmd : SFC_GET_FORMAT_SUBTYPE_COUNT + data : a pointer to an int + datasize : sizeof (int) +</PRE> +<P> +Example: +</P> +<PRE> + int count ; + sf_command (sndfile, SFC_GET_FORMAT_SUBTYPE_COUNT, &count, sizeof (int)) ; +</PRE> +<DL> +<DT>Return value: </DT> + <DD>0 +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_GET_FORMAT_SUBTYPE"></A> +<H2><BR><B>SFC_GET_FORMAT_SUBTYPE</B></H2> +<P> +Retrieve information about a subformat. +</P> +<P> +Parameters: +</P> +<PRE> + sndfile : Not used. + cmd : SFC_GET_FORMAT_SUBTYPE + data : a pointer to an SF_FORMAT_INFO struct + datasize : sizeof (SF_FORMAT_INFO) +</PRE> +<P> +Example: +</P> +<PRE> + SF_FORMAT_INFO format_info ; + int k, count ; + + sf_command (sndfile, SFC_GET_FORMAT_SUBTYPE_COUNT, &count, sizeof (int)) ; + + /* Retrieve all the subtypes supported by the WAV format. */ + for (k = 0 ; k < count ; k++) + { format_info.format = k ; + sf_command (sndfile, SFC_GET_FORMAT_SUBTYPE, &format_info, sizeof (format_info)) ; + if (! sf_format_check (format.info | SF_FORMAT_WAV)) + continue ; + printf ("%08x %s\n", format_info.format, format_info.name) ; + } ; +</PRE> +<P> +For a more comprehensive example, see the program list_formats.c in the examples/ +directory of the libsndfile source code distribution. +</P> +<DL> +<DT>Return value: </DT> + <DD>0 on success and non-zero otherwise. + <DD>The value of the format field will one of the major format identifiers such as SF_FORMAT_WAV + SF_FORMAT_AIFF. + <DD>The name field will contain a char* pointer to the name of the string; for instance + "WAV (Microsoft)" or "AIFF (Apple/SGI)". + <DD>The extention field will be a NULL pointer. +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_SET_ADD_PEAK_CHUNK"></A> +<H2><BR><B>SFC_SET_ADD_PEAK_CHUNK</B></H2> +<P> +By default, WAV and AIFF files which contain floating point data (subtype SF_FORMAT_FLOAT +or SF_FORMAT_DOUBLE) have a PEAK chunk. +By using this command, the addition of a PEAK chunk can be turned on or off. +</P> +<P> +Note : This call must be made before any data is written to the file. +</P> +<P> +Parameters: +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_SET_ADD_PEAK_CHUNK + data : Not used (should be NULL) + datasize : TRUE or FALSE. +</PRE> +<P> +Example: +</P> +<PRE> + /* Turn on the PEAK chunk. */ + sf_command (sndfile, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_TRUE) ; + + /* Turn off the PEAK chunk. */ + sf_command (sndfile, SFC_SET_ADD_PEAK_CHUNK, NULL, SF_FALSE) ; +</PRE> +<DL> +<DT>Return value:</DT> +<DD>Returns SF_TRUE if the peak chunk will be written after this call. +<DD>Returns SF_FALSE if the peak chunk will not be written after this call. +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_UPDATE_HEADER_NOW"></A> +<H2><BR><B>SFC_UPDATE_HEADER_NOW</B></H2> +<P> +The header of an audio file is normally written by libsndfile when the file is +closed using <B>sf_close()</B>. +</P> +<P> +There are however situations where large files are being generated and it would +be nice to have valid data in the header before the file is complete. +Using this command will update the file header to reflect the amount of data written +to the file so far. +Other programs opening the file for read (before any more data is written) will +then read a valid sound file header. +</P> +<P> +Parameters: +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_UPDATE_HEADER_NOW + data : Not used (should be NULL) + datasize : Not used. +</PRE> +<P> +Example: +</P> +<PRE> + /* Update the header now. */ + sf_command (sndfile, SFC_UPDATE_HEADER_NOW, NULL, 0) ; +</PRE> +<DL> +<DT>Return value:</DT> +<DD>0 +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_SET_UPDATE_HEADER_AUTO"></A> +<H2><BR><B>SFC_SET_UPDATE_HEADER_AUTO</B></H2> +<P> +Similar to SFC_UPDATE_HEADER_NOW but updates the header at the end of every call +to the <B>sf_write*</B> functions. +</P> +<P> +Parameters: +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_UPDATE_HEADER_NOW + data : Not used (should be NULL) + datasize : SF_TRUE or SF_FALSE +</PRE> +<P> +Example: +</P> +<PRE> + /* Turn on auto header update. */ + sf_command (sndfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_TRUE) ; + + /* Turn off auto header update. */ + sf_command (sndfile, SFC_SET_UPDATE_HEADER_AUTO, NULL, SF_FALSE) ; +</PRE> +<DL> +<DT>Return value:</DT> +<DD>TRUE if auto update header is now on; FALSE otherwise. +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_FILE_TRUNCATE"></A> +<H2><BR><B>SFC_FILE_TRUNCATE</B></H2> +<P> +Truncate a file open for write or for read/write. +</P> +<P> +Parameters: +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_FILE_TRUNCATE + data : A pointer to an sf_count_t. + datasize : sizeof (sf_count_t) +</PRE> + +<P> +Truncate the file to the number of frames specified by the sf_count_t pointed +to by data. +After this command, both the read and the write pointer will be +at the new end of the file. +This command will fail (returning non-zero) if the requested truncate position +is beyond the end of the file. +</P> +<P> +Example: +</P> +<PRE> + /* Truncate the file to a length of 20 frames. */ + sf_count_t frames = 20 ; + sf_command (sndfile, SFC_FILE_TRUNCATE, &frames, sizeof (frames)) ; +</PRE> +<DL> +<DT>Return value:</DT> + <DD>Zero on sucess, non-zero otherwise. +</DL> + +<!-- ========================================================================= --> +<A NAME="SFC_SET_RAW_START_OFFSET"></A> +<H2><BR><B>SFC_SET_RAW_START_OFFSET</B></H2> +<P> +Change the data start offset for files opened up as SF_FORMAT_RAW. +</P> +<P> +Parameters: +<PRE> + sndfile : A valid SNDFILE* pointer + cmd : SFC_SET_RAW_START_OFFSET + data : A pointer to an sf_count_t. + datasize : sizeof (sf_count_t) +</PRE> + +<P> +For a file opened as format SF_FORMAT_RAW, set the data offset to the value +given by data. +</P> +<P> +Example: +</P> +<PRE> + /* Reset the data offset to 5 bytes from the start of the file. */ + sf_count_t offset = 5 ; + sf_command (sndfile, SFC_SET_RAW_START_OFFSET, &offset, sizeof (offset)) ; +</PRE> +<DL> +<DT>Return value:</DT> + <DD>Zero on sucess, non-zero otherwise. +</DL> + +<!-- ========================================================================= --> + +<HR> +<P> + The libsndfile home page is here : + <A HREF="http://www.mega-nerd.com/libsndfile/"> + http://www.mega-nerd.com/libsndfile/</A>. +<BR> +Version : 1.0.25 +</P> + +</BODY> +</HTML> diff --git a/doc/embedded_files.html b/doc/embedded_files.html new file mode 100644 index 0000000..c73e86a --- /dev/null +++ b/doc/embedded_files.html @@ -0,0 +1,47 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> + +<HEAD> + <TITLE> + libsndfile : Embedded Sound Files. + </TITLE> + <META NAME="Author" CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)"> + <META NAME="Description" CONTENT="The libsndfile API."> + <META NAME="Keywords" CONTENT="WAV AIFF AU libsndfile sound audio dsp Linux"> + <LINK REL="stylesheet" HREF="libsndfile.css" TYPE="text/css" MEDIA="all"> + <LINK REL="stylesheet" HREF="print.css" TYPE="text/css" MEDIA="print"> +</HEAD> +<!-- pepper --> +<BODY> +<!-- pepper --> +<H1><B>Embedded Sound Files.</B></H1> + +<P> +By using the open SNDFILE with a file descriptor function: +</P> +<!-- pepper --> +<PRE> + SNDFILE* sf_open_fd (int fd, int mode, SF_INFO *sfinfo, int close_desc) ; +</PRE> +<!-- pepper --> +<P> +it is possible to open sound files embedded within larger files. +There are however a couple of caveats: +<P> +<!-- pepper --> +<UL> + <LI> Read/Write mode (SFM_RDWR) is not supported. + <LI> Writing of embedded files is only supported at the end of the file. + <LI> Reading of embedded files is only supported at file offsets greater + than zero. + <LI> Not all file formats are supported (currently only WAV, AIFF and AU). +</UL> +<!-- pepper --> +<P> +The test program <B>multi_file_test.c</B> in the <B>tests/</B> directory of the +source code tarball shows how this functionality is used to read and write +embedded files. +</P> +<!-- pepper --> +</BODY> +</HTML> diff --git a/doc/index.html b/doc/index.html new file mode 100644 index 0000000..bb128f5 --- /dev/null +++ b/doc/index.html @@ -0,0 +1,494 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> + +<HEAD> + <TITLE> + libsndfile + </TITLE> + <META NAME="Author" CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)"> + <META NAME="Version" CONTENT="libsndfile-1.0.25"> + <META NAME="Description" CONTENT="The libsndfile Home Page"> + <META NAME="Keywords" CONTENT="WAV AIFF AU SVX PAF NIST W64 libsndfile sound audio dsp Linux"> + <META NAME="ROBOTS" CONTENT="NOFOLLOW"> + <LINK REL="stylesheet" HREF="libsndfile.css" TYPE="text/css" MEDIA="all"> + <LINK REL="stylesheet" HREF="print.css" TYPE="text/css" MEDIA="print"> +</HEAD> + +<BODY> +<!-- pepper --> +<CENTER> + <IMG SRC="libsndfile.jpg" HEIGHT=98 WIDTH=367 ALT="libsndfile.jpg"> +</CENTER> +<!-- pepper --> +<CENTER> + <A HREF="#History">History</A> -+- + <A HREF="#Features">Features</A> -+- + <A HREF="#Similar">Similar or Related Projects</A> -+- + <A HREF="NEWS">News</A> + <br> + <A HREF="development.html">Development</A> -+- + <A HREF="api.html">Programming Interface</A> -+- + <A HREF="bugs.html">Bug Reporting</A> -+- + <A HREF="#Download">Download</A> + <br> + <A HREF="FAQ.html">FAQ</A> -+- + <A HREF="lists.html">Mailing Lists</A> -+- + <A HREF="ChangeLog">Change Log</A> -+- + <A HREF="#Licensing">Licensing Information</A> -+- + <A HREF="#SeeAlso">See Also</A> +</CENTER> + +<br><br> +<P> + Libsndfile is a C library for reading and writing files containing sampled sound + (such as MS Windows WAV and the Apple/SGI AIFF format) through one standard + library interface. It is released in source code format under the + <A HREF="http://www.gnu.org/copyleft/lesser.html">Gnu Lesser General Public License</A>. +</P> +<!-- pepper --> +<P> + The library was written to compile and run on a Linux system but should compile + and run on just about any Unix (including MacOS X). + There are also pre-compiled binaries available for 32 and 64 bit windows. +</P> +<P> + It was designed to handle both little-endian (such as WAV) and big-endian + (such as AIFF) data, and to compile and run correctly on little-endian (such as Intel + and DEC/Compaq Alpha) processor systems as well as big-endian processor systems such + as Motorola 68k, Power PC, MIPS and Sparc. + Hopefully the design of the library will also make it easy to extend for reading and + writing new sound file formats. +</P> +<!-- pepper --> +<P> + It has been compiled and tested (at one time or another) on the following systems: +</P> +<!-- pepper --> +<UL> + <LI>Every platform supported by Debian GNU/Linux including x86_64-linux-gnu, + i486-linux-gnu, powerpc-linux-gnu, sparc-linux-gnu, alpha-linux-gnu, + mips-linux-gnu and armel-linux-gnu.</LI> + <LI>arm-linux-androideab (Android phones OS)</LI> + <LI>powerpc-apple-darwin7.0 (Mac OS X 10.3)</LI> + <LI>sparc-sun-solaris2.8 (using gcc)</LI> + <LI>mips-sgi-irix5.3 (using gcc)</LI> + <LI>QNX 6.0</LI> + <LI>i386-unknown-openbsd2.9</LI> +</UL> +<!-- pepper --> +<P> + At the moment, each new release is being tested on i386 Linux, x86_64 Linux, + PowerPC Linux, Win32 and Win64. +</P> +<!-- pepper --> + +<A NAME="Capabilities"></A> +<A NAME="Features"></A> +<H1><B>Features</B></H1> +<P> + libsndfile has the following main features : +</P> + <UL> + <lI> Ability to read and write a large number of file formats. + <LI> A simple, elegant and easy to use Applications Programming Interface. + <LI> Usable on Unix, Win32, MacOS and others. + <LI> On the fly format conversion, including endian-ness swapping, type conversion + and bitwidth scaling. + <LI> Optional normalisation when reading floating point data from files containing + integer data. + <LI> Ability to open files in read/write mode. + <LI> The ability to write the file header without closing the file (only on files + open for write or read/write). + <LI> Ability to query the library about all supported formats and retrieve text + strings describing each format. + </UL> +<P> + libsndfile has a comprehensive test suite so that each release is as bug free + as possible. + When new bugs are found, new tests are added to the test suite to ensure that + these bugs don't creep back into the code. + When new features are added, tests are added to the test suite to make sure that + these features continue to work correctly even when they are old features. + </P> +<P> + The following table lists the file formats and encodings that libsndfile can read + and write. + The file formats are arranged across the top and encodings along the left + edge. +</P> +<br> + +<TABLE BORDER="1" cellpadding="2"> + <TR><TD> </TD> + <TD ALIGN="center">Micro- soft<br>WAV</TD> + <TD ALIGN="center">SGI / Apple<br>AIFF / AIFC</TD> + <TD ALIGN="center">Sun / DEC /<br>NeXT<br>AU / SND</TD> + <TD ALIGN="center">Header- less<br>RAW</TD> + <TD ALIGN="center">Paris Audio<br>File<br>PAF</TD> + <TD ALIGN="center">Commo- dore<br>Amiga<br>IFF / SVX</TD> + <TD ALIGN="center">Sphere<br>Nist<br>WAV</TD> + <TD ALIGN="center">IRCAM<br>SF</TD> + <TD ALIGN="center">Creative<br>VOC</TD> + <TD ALIGN="center">Sound forge<br>W64</TD> + <TD ALIGN="center"><A HREF="octave.html">GNU Octave 2.0</A><br>MAT4</TD> + <TD ALIGN="center"><A HREF="octave.html">GNU Octave 2.1</A><br>MAT5</TD> + <TD ALIGN="center">Portable Voice Format<br>PVF</TD> + <TD ALIGN="center">Fasttracker 2<br>XI</TD> + <TD ALIGN="center">HMM Tool Kit<br>HTK</TD> + <TD ALIGN="center">Apple<br>CAF</TD> + <TD ALIGN="center">Sound<br>Designer II<br>SD2</TD> + <TD ALIGN="center">Free Lossless Audio Codec<br>FLAC</TD> + </TR> +<TR><TD>Unsigned 8 bit PCM</TD> + <TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD> </TD><TD ALIGN="center">R/W</TD> + <TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD ALIGN="center">R/W</TD> + <TD ALIGN="center">R/W</TD><TD> </TD><TD ALIGN="center">R/W</TD><TD> </TD> + <TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD> +</TR> + +<TR><TD>Signed 8 bit PCM</TD> + <TD> </TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD> + <TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD> </TD> + <TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD ALIGN="center">R/W</TD> + <TD> </TD><TD> </TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD> +</TR> + +<TR><TD>Signed 16 bit PCM</TD> + <TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD> + <TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD> + <TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD> + <TD ALIGN="center">R/W</TD><TD> </TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD> + <TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD> +</TR> + +<TR><TD>Signed 24 bit PCM</TD> + <TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD> + <TD ALIGN="center">R/W</TD><TD> </TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD> + <TD> </TD><TD ALIGN="center">R/W</TD><TD> </TD><TD> </TD><TD> </TD> + <TD> </TD><TD> </TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD> +</TR> + +<TR><TD>Signed 32 bit PCM</TD> + <TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD> + <TD> </TD><TD> </TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD> </TD> + <TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD> + <TD> </TD><TD> </TD><TD ALIGN="center">R/W</TD><TD> </TD><TD> </TD> +</TR> + +<TR><TD>32 bit float</TD> + <TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD> + <TD> </TD><TD> </TD><TD> </TD><TD ALIGN="center">R/W</TD><TD> </TD> + <TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD> </TD> + <TD> </TD><TD> </TD><TD ALIGN="center">R/W</TD><TD> </TD><TD> </TD> +</TR> + +<TR><TD>64 bit double</TD> + <TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD> + <TD ALIGN="center">R/W</TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD> + <TD> </TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD> + <TD> </TD><TD> </TD><TD> </TD><TD ALIGN="center">R/W</TD><TD> </TD><TD> </TD> +</TR> + +<TR><TD>u-law encoding</TD> + <TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD> + <TD> </TD><TD> </TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD> + <TD ALIGN="center">R/W</TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD> + <TD ALIGN="center">R/W</TD><TD> </TD><TD> </TD> +</TR> +<TR><TD>A-law encoding</TD> + <TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD> + <TD> </TD><TD> </TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD> + <TD ALIGN="center">R/W</TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD> + <TD ALIGN="center">R/W</TD><TD> </TD><TD> </TD> +</TR> + +<TR><TD>IMA ADPCM</TD> + <TD ALIGN="center">R/W</TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD> + <TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD ALIGN="center">R/W</TD> + <TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD> + <TD> </TD><TD> </TD> +</TR> + +<TR><TD>MS ADPCM</TD> + <TD ALIGN="center">R/W</TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD> + <TD> </TD><TD> </TD><TD> </TD><TD ALIGN="center">R/W</TD><TD> </TD><TD> </TD> + <TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD> +</TR> + +<TR><TD>GSM 6.10</TD> + <TD ALIGN="center">R/W</TD><TD ALIGN="center">R/W</TD><TD> </TD><TD ALIGN="center">R/W</TD><TD> </TD><TD> </TD> + <TD> </TD><TD> </TD><TD> </TD><TD ALIGN="center">R/W</TD><TD> </TD><TD> </TD> + <TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD> +</TR> + +<TR><TD>G721 ADPCM 32kbps</TD> + <TD ALIGN="center">R/W</TD><TD> </TD><TD ALIGN="center">R/W</TD><TD> </TD><TD> </TD><TD> </TD> + <TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD> + <TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD> +</TR> + +<TR><TD>G723 ADPCM 24kbps</TD> + <TD> </TD><TD> </TD><TD ALIGN="center">R/W</TD><TD> </TD><TD> </TD><TD> </TD> + <TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD> + <TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD> +</TR> + +<TR><TD>G723 ADPCM 40kbps</TD> + <TD> </TD><TD> </TD><TD ALIGN="center">R/W</TD><TD> </TD><TD> </TD><TD> </TD> + <TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD> + <TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD> +</TR> + +<TR><TD>12 bit DWVW</TD> + <TD> </TD><TD ALIGN="center">R/W</TD><TD> </TD><TD ALIGN="center">R/W</TD><TD> </TD><TD> </TD> + <TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD> + <TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD> +</TR> + +<TR><TD>16 bit DWVW</TD> + <TD> </TD><TD ALIGN="center">R/W</TD><TD> </TD><TD ALIGN="center">R/W</TD><TD> </TD><TD> </TD> + <TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD> + <TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD> +</TR> + +<TR><TD>24 bit DWVW</TD> + <TD> </TD><TD ALIGN="center">R/W</TD><TD> </TD><TD ALIGN="center">R/W</TD><TD> </TD><TD> </TD> + <TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD> + <TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD> +</TR> +<TR><TD>Ok Dialogic ADPCM</TD> + <TD> </TD><TD> </TD><TD> </TD><TD ALIGN="center">R/W</TD><TD> </TD><TD> </TD> + <TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD> + <TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD> +</TR> +<TR><TD>8 bit DPCM</TD> + <TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD> + <TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD> + <TD> </TD><TD ALIGN="center">R/W</TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD> +</TR> +<TR><TD>16 bit DPCM</TD> + <TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD> + <TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD> + <TD> </TD><TD ALIGN="center">R/W</TD><TD> </TD><TD> </TD><TD> </TD><TD> </TD> +</TR> +</TABLE> + +<p> +From version 1.0.18, libsndfile also reads and writes + <a href="http://flac.sourceforge.net/">FLAC</a> +and + <a href="http://www.vorbis.com/">Ogg/Vorbis</a>. +</p> + +<!-- pepper --> + +<P> + Some of the file formats I am also interested in adding are: +</P> + <UL> + <LI> Kurzweil K2000 sampler files. + <LI> Ogg Speex. + </UL> +<P> + I have decided that I will not be adding support for MPEG Layer 3 (commonly + known as MP3) due to the patent issues surrounding this file format. + See + <a href="http://www.mega-nerd.com/libsndfile/FAQ.html#Q020"> + the FAQ</a> + for more. +</P> +<P> + Other file formats may also be added on request. +</P> + +<!-- pepper --> + +<A NAME="History"></A> +<H1><B>History</B></H1> +<P> + My first attempt at reading and writing WAV files was in 1990 or so under Windows + 3.1. + I started using Linux in early 1995 and contributed some code to the + <A HREF="http://www.vaxxine.com/ve3wwg/gnuwave.html">wavplay</A> + program. + That contributed code would eventually mutate into this library. + As one of my interests is Digital Signal Processing (DSP) I decided that as well as + reading data from an audio file in the native format (typically 16 bit short integers) + it would also be useful to be able to have the library do the conversion to floating + point numbers for DSP applications. + It then dawned on me that whatever file format (anything from 8 bit unsigned chars, + to 32 bit floating point numbers) the library should be able to convert the data to + whatever format the library user wishes to use it in. + For example, in a sound playback program, the library caller typically wants the sound + data in 16 bit short integers to dump into a sound card even though the data in the + file may be 32 bit floating point numbers (ie Microsoft's WAVE_FORMAT_IEEE_FLOAT + format). + Another example would be someone doing speech recognition research who has recorded + some speech as a 16 bit WAV file but wants to process it as double precision floating + point numbers. +</P> +<P> + Here is the release history for libsndfile : +</P> + <UL> + <LI>Version 0.0.8 (Feb 15 1999) First official release. + <LI>Version 0.0.28 (Apr 26 2002) Final release of version 0 of libsndfile. + <LI>Version 1.0.0rc1 (Jun 24 2002) Release candidate 1 of version 1 of libsndfile. + <LI>Version 1.0.0rc6 (Aug 14 2002) MacOS 9 fixes. + <LI>Version 1.0.0 (Aug 16 2002) First 1.0.X release. + <LI>Version 1.0.1 (Sep 14 2002) Added MAT4 and MAT5 file formats. + <LI>Version 1.0.2 (Nov 24 2002) Added VOX ADPCM format. + <LI>Version 1.0.3 (Dec 09 2002) Fixes for Linux on ia64 CPUs. + <LI>Version 1.0.4 (Feb 02 2003) New file formats and functionality. + <LI>Version 1.0.5 (May 03 2003) One new file format and new functionality. + <LI>Version 1.0.6 (Feb 08 2004) Large file fix for Linux/Solaris, new functionality + and Win32 improvements. + <LI>Version 1.0.7 (Feb 24 2004) Fix build problems on MacOS X and fix ia64/MIPS etc + clip mode detction. + <LI>Version 1.0.8 (Mar 14 2004) Minor bug fixes. + <LI>Version 1.0.9 (Mar 30 2004) Add AVR format. Improve handling of some WAV files. + <LI>Version 1.0.10 (Jun 15 2004) Minor bug fixes. Fix support for Win32 MinGW compiler. + <LI>Version 1.0.11 (Nov 15 2004) Add SD2 file support, reading of loop data in WAV and AIFF. + Minor bug fixes. + <LI>Version 1.0.12 (Sep 30 2005) Add FLAC and CAF file support, virtual I/O interface. + Minor bug fixes and cleanups. + <LI>Version 1.0.13 (Jan 21 2006) Add read/write of instrument chunks. Minor bug fixes. + <LI>Version 1.0.14 (Feb 19 2006) Minor bug fixes. Start shipping windows binary/source ZIP. + <LI>Version 1.0.15 (Mar 16 2006) Minor bug fixes. + <LI>Version 1.0.16 (Apr 30 2006) Add support for RIFX. Other minor feature enhancements and + bug fixes. + <LI>Version 1.0.17 (Aug 31 2006) Add C++ wrapper sndfile.hh. Minor bug fixes and cleanups. + <LI>Version 1.0.18 (Feb 07 2009) Add Ogg/Vorbis suppport, remove captive libraries, many + new features and bug fixes. Generate Win32 and Win64 pre-compiled binaries. + <LI>Version 1.0.19 (Mar 02 2009) Fix for CVE-2009-0186. Huge number of minor fixes as a + result of static analysis. + <LI>Version 1.0.20 (May 14 2009) Fix for potential heap overflow. + <LI>Version 1.0.21 (December 13 2009) Bunch of minor bug fixes. + <LI>Version 1.0.22 (October 04 2010) Bunch of minor bug fixes. + <LI>Version 1.0.23 (October 10 2010) Minor bug fixes. + <LI>Version 1.0.24 (March 23 2011) Minor bug fixes. + <LI>Version 1.0.25 (July 13 2011) Fix for Secunia Advisory SA45125. Minor bug fixes and + improvements. + </UL> + +<A NAME="Similar"></A> +<H1><B>Similar or Related Projects</B></H1> + + <UL> + <LI><A HREF="http://sox.sourceforge.net/">SoX</A> is a program for + converting between sound file formats. + <LI><A HREF="http://www.hitsquad.com/smm/programs/WavPlay/">Wavplay</A> started out + as a minimal WAV file player under Linux and has mutated into Gnuwave, a client/server + application for more general multimedia and games sound playback. + <LI><A HREF="http://www.68k.org/~michael/audiofile/">Audiofile</A> (libaudiofile) is + a library similar to libsndfile but with a different programming interface. The + author Michael Pruett has set out to clone (and fix some bugs in) the libaudiofile + library which ships with SGI's IRIX OS. + <LI><A HREF="ftp://ccrma-ftp.stanford.edu/pub/Lisp/sndlib.tar.gz">sndlib.tar.gz</A> is + another library written by Bill Schottstaedt of CCRMA. + </UL> + +<A NAME="Licensing"></A> +<H1><B>Licensing</B></H1> +<P> + libsndfile is released under the terms of the GNU Lesser General Public License, + of which there are two versions; + <a href="http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">version 2.1</a> + and + <a href="http://www.gnu.org/copyleft/lesser.html">version 3</a>. + To maximise the compatibility of libsndfile, the user may choose to use libsndfile + under either of the above two licenses. + You can also read a simple explanation of the ideas behind the GPL and the LGPL + <A HREF="http://www.gnu.org/copyleft/copyleft.html">here</A>. +</P> +<P> + You can use libsndfile with + <A HREF="http://www.gnu.org/">Free Software</A>, + <A HREF="http://www.opensource.org/">Open Source</A>, + proprietary, shareware or other closed source applications as long as libsndfile + is used as a dynamically loaded library and you abide by a small number of other + conditions (read the LGPL for more info). + With applications released under the GNU GPL you can also use libsndfile statically + linked to your application. +</P> +<P> + I would like to see libsndfile used as widely as possible but I would prefer it + if you released software that uses libsndfile as + <A HREF="http://www.gnu.org/">Free Software</A> + or + <A HREF="http://www.opensource.org/">Open Source</A>. + However, if you put in a great deal of effort building a significant application + which simply uses libsndfile for file I/O, then I have no problem with you releasing + that as closed source and charging as much money as you want for it as long as you + abide by <A HREF="http://www.gnu.org/copyleft/lesser.html">the license</A>. +</P> + +<A NAME="Download"></A> +<H1><B>Download</B></H1> +<P> + Here is the latest version. It is available in the following formats: +</P> + <UL> + <LI>Source code as a .tar.gz : + <A HREF="files/libsndfile-1.0.25.tar.gz">libsndfile-1.0.25.tar.gz</A> + and + <A HREF="files/libsndfile-1.0.25.tar.gz.asc">(GPG signature)</A>. + <LI>Win32 installer: + <A HREF="files/libsndfile-1.0.25-w32-setup.exe"> + libsndfile-1.0.25-w32-setup.exe</A> (thoroughly tested under + <a href="http://www.winehq.com/">Wine</a> and Windows XP). + <LI>Win64 installer: + <A HREF="files/libsndfile-1.0.25-w64-setup.exe"> + libsndfile-1.0.25-w64-setup.exe</A> + (thoroughly tested on 64 bit Windows 7). + </UL> + +<P> +The Win32 installer was compiled for Windows XP but should also work on Windows +2000, Vista and Windows 7. +</p> + +<P> + Pre-release versions of libsndfile are available + <A HREF="http://www.mega-nerd.com/tmp/">here</A> + and are announced on the + <A HREF="lists.html">libsndfile-devel</A> + mailing list. +</P> + +<A NAME="SeeAlso"></A> +<H1><B>See Also</B></H1> + <UL> + <LI><a href="http://www.mega-nerd.com/libsndfile/tools/"> + sndfile-tools</a> + : a small collection of programs which use libsndfile. + </UL> + +<br><br> + +<hr> + +<P> + The latest version of this document can be found + <A HREF="http://www.mega-nerd.com/libsndfile/">here</A>. +</P> +<P> +Author : + <A HREF="mailto:erikd@mega-nerd.com"> + Erik de Castro Lopo</a> +</P> +<!-- pepper --> +<P> +This page has been accessed + <IMG SRC= + "/cgi-bin/Count.cgi?ft=6|frgb=55;55;55|tr=0|trgb=0;0;0|wxh=15;20|md=7|dd=B|st=1|sh=1|df=libsndfile.dat" + HEIGHT=30 WIDTH=100 ALT="counter.gif"> +times. +</P> +<!-- pepper --> +<!-- pepper --> +<!-- pepper --> + +<br><br> +</BODY> +</HTML> diff --git a/doc/libsndfile.css b/doc/libsndfile.css new file mode 100644 index 0000000..eab8d06 --- /dev/null +++ b/doc/libsndfile.css @@ -0,0 +1,90 @@ +body { + background : black ; + color : white ; + font-family : arial, helvetica, sans-serif ; + line-height: 1.5 ; +} +td { + font-family : arial, helvetica, sans-serif ; + background : black ; + color : white ; +} +center { + font-family : arial, helvetica, sans-serif ; +} +p { + font-family : arial, helvetica, sans-serif ; + text-align : left ; + margin-left : 3% ; + margin-right : 3% ; +} +.indent_block { + font-family : arial, helvetica, sans-serif ; + text-align : left ; + margin-left : 10% ; + margin-right : 10% ; +} +br { + font-family : arial, helvetica, sans-serif ; +} +form { + font-family : arial, helvetica, sans-serif ; +} +ul { + font-family : arial, helvetica, sans-serif ; + text-align : left ; + margin-left : 3% ; + margin-right : 6% ; +} +ol { + font-family : arial, helvetica, sans-serif ; + text-align : left ; + margin-left : 3% ; + margin-right : 6% ; +} +dl { + font-family : arial, helvetica, sans-serif ; + text-align : left ; + margin-left : 3% ; + margin-right : 3% ; +} +h1 { + font-size : xx-large ; + background : black ; + color : #5050FF ; + text-align : left ; + margin-left : 3% ; + margin-right : 3% ; +} +h2 { + font-size : x-large ; + background : black ; + color : #5050FF ; + text-align : left ; + margin-left : 3% ; + margin-right : 3% ; +} +h3 { + font-size : large ; + background : black ; + color : #5050FF ; + text-align : left ; + margin-left : 3% ; + margin-right : 3% ; +} +h4 { + font-size : medium ; + background : black ; + color : #5050FF ; + text-align : left ; + margin-left : 3% ; + margin-right : 3% ; +} +pre { + font-family : courier, monospace ; + font-size : medium ; +} +a:link { color : #9090FF ; } +a:visited { color : #5050FF ; } +a:active { color : #FF00FF ; } +a:hover { background-color : #202080 ; } diff --git a/doc/libsndfile.css.in b/doc/libsndfile.css.in new file mode 100644 index 0000000..9069080 --- /dev/null +++ b/doc/libsndfile.css.in @@ -0,0 +1,90 @@ +body { + background : @HTML_BGCOLOUR@ ; + color : @HTML_FGCOLOUR@ ; + font-family : arial, helvetica, sans-serif ; + line-height: 1.5 ; +} +td { + font-family : arial, helvetica, sans-serif ; + background : @HTML_BGCOLOUR@ ; + color : @HTML_FGCOLOUR@ ; +} +center { + font-family : arial, helvetica, sans-serif ; +} +p { + font-family : arial, helvetica, sans-serif ; + text-align : left ; + margin-left : 3% ; + margin-right : 3% ; +} +.indent_block { + font-family : arial, helvetica, sans-serif ; + text-align : left ; + margin-left : 10% ; + margin-right : 10% ; +} +br { + font-family : arial, helvetica, sans-serif ; +} +form { + font-family : arial, helvetica, sans-serif ; +} +ul { + font-family : arial, helvetica, sans-serif ; + text-align : left ; + margin-left : 3% ; + margin-right : 6% ; +} +ol { + font-family : arial, helvetica, sans-serif ; + text-align : left ; + margin-left : 3% ; + margin-right : 6% ; +} +dl { + font-family : arial, helvetica, sans-serif ; + text-align : left ; + margin-left : 3% ; + margin-right : 3% ; +} +h1 { + font-size : xx-large ; + background : @HTML_BGCOLOUR@ ; + color : #5050FF ; + text-align : left ; + margin-left : 3% ; + margin-right : 3% ; +} +h2 { + font-size : x-large ; + background : @HTML_BGCOLOUR@ ; + color : #5050FF ; + text-align : left ; + margin-left : 3% ; + margin-right : 3% ; +} +h3 { + font-size : large ; + background : @HTML_BGCOLOUR@ ; + color : #5050FF ; + text-align : left ; + margin-left : 3% ; + margin-right : 3% ; +} +h4 { + font-size : medium ; + background : @HTML_BGCOLOUR@ ; + color : #5050FF ; + text-align : left ; + margin-left : 3% ; + margin-right : 3% ; +} +pre { + font-family : courier, monospace ; + font-size : medium ; +} +a:link { color : #9090FF ; } +a:visited { color : #5050FF ; } +a:active { color : #FF00FF ; } +a:hover { background-color : #202080 ; } diff --git a/doc/libsndfile.jpg b/doc/libsndfile.jpg Binary files differnew file mode 100644 index 0000000..7855b92 --- /dev/null +++ b/doc/libsndfile.jpg diff --git a/doc/lists.html b/doc/lists.html new file mode 100644 index 0000000..7d95170 --- /dev/null +++ b/doc/lists.html @@ -0,0 +1,52 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> + +<HEAD> + <TITLE> + libsndfile Mailing Lists + </TITLE> + <META NAME="Author" CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)"> + <LINK REL="stylesheet" HREF="libsndfile.css" TYPE="text/css" MEDIA="all"> + <LINK REL="stylesheet" HREF="print.css" TYPE="text/css" MEDIA="print"> +</HEAD> + +<BODY> +<!-- pepper --> +<H1><BR>libsndfile Mailing Lists</H1> +<!-- pepper --> +<P> +There are three mailing lists for libsndfile: +</P> +<!-- pepper --> +<UL> + <LI> <B>libsndfile-announce@mega-nerd.com</B> <!-- pepper --> + <A HREF="mailto:libsndfile-announce-request@mega-nerd.com?subject=subscribe">Subscribe</A> + <BR> + A list which will announce each new release of libsndfile. + Noone can post to this list except the author. + <BR><BR> + + <LI> <B>libsndfile-devel@mega-nerd.com</B> <!-- pepper --> + <A HREF="mailto:libsndfile-devel-request@mega-nerd.com?subject=subscribe">Subscribe</A> + <BR> + A list for discussing bugs, porting issues and feature requests. + Posting is restricted to subscribers. + <BR><BR> + + <LI> <B>libsndfile-users@mega-nerd.com</B> <!-- pepper --> + <A HREF="mailto:libsndfile-users-request@mega-nerd.com?subject=subscribe">Subscribe</A> + <BR> + A list for discussing the use of libsndfile in other programs. + Posting is restricted to subscribers. + <!-- pepper --> + <BR><BR> +</UL> +<!-- pepper --> +<P> +The libsndfile-devel and libsndfile-users list will automatically receive a +copy of all emails to the libsndfile-announce list. +</P> +<BR> +<!-- pepper --> +</BODY> +</HTML> diff --git a/doc/new_file_type.HOWTO b/doc/new_file_type.HOWTO new file mode 100644 index 0000000..a6da80a --- /dev/null +++ b/doc/new_file_type.HOWTO @@ -0,0 +1,135 @@ +new_file_type.HOWTO +=================== + + Original : Wed May 23 19:05:07 EST 2001 + Update 1 : Fri Jul 11 22:12:38 EST 2003 + +This document will attempt to explain as fully as possible how to add code to +libsndfile to allow the reading and writing of new file types. By new file +type I particularly mean a new header type rather than a new encoding method +for an existing file type. + +This HOWTO will take the form of a step by step guide. It will assume that you +have all required tools including : + + - gcc + - make (should really be the GNU version) + - autoconf + - automake + - libtool + +These should all be available on the GNU ftp site: ftp://ftp.gnu.org/pub/gnu/. + +To help make these steps clearer let's suppose we are adding support for the +Whacky file format whose files contain 'W','A','C' and 'K' as the first four +bytes of the file format. Lets also assume that Whacky files contain PCM encoded +data. + +Step 1 +------ +Create a new .c file in the src/ directory of the libsndfile source tree. The +file name should be reasonable descriptive so that is is obvious that files of +the new type are handled by this file. In this particular case the file might +be named 'whacky.c'. + +Step 2 +------ +Add your new source code file to the build process. + +Edit the file src/Makefile.am and add the name of your file handler to the +FILESPECIFIC list of handlers. This list looks something like this: + +FILESPECIFIC = aiff.c au.c au_g72x.c nist.c paf.c raw.c samplitude.c \ + svx.c wav.c wav_float.c wav_gsm610.c wav_ima_adpcm.c \ + wav_ms_adpcm.c + +Then, run the script named 'reconf' in the libsndfile top level directory, +which will run autoconf and other associated tools. Finally run "./configure" +in the top level directory. You may want to use the "--disable-gcc-opt" option +to disable gcc optimisations and make debugging with gdb/ddd easier. + +Step 3 +------ +Add a unique identifier for the new file type. + +Edit src/sndfile.h.in and find the enum containing the SF_FORMAT_XXX identifiers. +Since you will be adding a major file type you should add your identifier to the +top part of the list where the values are above 0x10000 in value. The easiest +way to do this is to find the largest value in the list, add 0x10000 to it and +make that your new identifier value. The identifier should be something like +SF_FORMAT_WACK. + +Step 4 +------ +Add code to the file type recogniser function. + +Edit src/sndfile.c and find the function guess_file_type (). This function +reads the first 3 ints of the file and from that makes a guess at the file +type. In our case we would add: + + + if (buffer [0] == MAKE_MARKER ('W','A','C','K')) + return SF_FORMAT_WACK ; + +The use of the MAKE_MARKER macro should be pretty obvious and it is defined at the +top of file should you need to have a look at it. + +Step 5 +------ +Add a call to your open function from psf_open_file (). + +Edit src/sndfile.c and find the switch statement in psf_open_file (). It starts +like this: + + switch (filetype) + { case SF_FORMAT_WAV : + error = wav_open (psf) ; + break ; + + case SF_FORMAT_AIFF : + error = aiff_open (psf) ; + break ; + +Towards the bottom of this switch statement your should add one for the new file +type. Something like: + + case SF_FORMAT_WACK : + sf_errno = whacky_open (psf) ; + break ; + +Setp 6 +------ +Add prototypes for new open read and open write functions. + +Edit src/common.h, go to the bottom of the file and add something like + + int whacky_open (SF_PRIVATE *psf) ; + +Step 7 +------ + +Implement your open read function. The best way to do this is by coding +something much like one of the other file formats. The file src/au.c might be +a good place to start. + +In src/whacky.c you should now implement the function whacky_open() which +was prototyped in src/common.h. This function should return 0 on success and +a non-zero number on error. + +Error values are defined in src/common.h in a enum which starts at SFE_NO_ERROR. +When adding a new error value, you also need to add an error string to the +SndfileErrors array in src/sndfile.c. + +To parse the header of your new file type you should avoid using standard read/ +write/seek functions (and the fread/fwrite/fseek etc) and instead use +psf_binheader_readf () which is implemented and documented in src/common.h. + +During the parsing process, you should also print logging information to +libsndfile's internal log buffer using the psf_log_printf() function. + +At the end of the open read process, you should have set a number of fields in the +SF_PRIVATE structure pointed to by psf. + + + +*** THIS FILE IS INCOMPLETE *** diff --git a/doc/octave.html b/doc/octave.html new file mode 100644 index 0000000..525b7ae --- /dev/null +++ b/doc/octave.html @@ -0,0 +1,118 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> + +<HEAD> + <TITLE> + libsndfile and GNU Octave + </TITLE> + <META NAME="Author" CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)"> + <LINK REL="stylesheet" HREF="libsndfile.css" TYPE="text/css" MEDIA="all"> + <LINK REL="stylesheet" HREF="print.css" TYPE="text/css" MEDIA="print"> +</HEAD> + +<BODY> + +<BR> +<H1><B>libsndfile and GNU Octave</B></H1> +<P> + <A HREF="http://www.octave.org/">GNU Octave</A> is a high-level interactive + language for numerical computations. + There are currently two development streams, a stable 2.0.X series and a + development 2.1.X series. + Octave reads and writes data in binary formats that were originally developed + for + <A HREF="http://www.mathworks.com/">MATLAB</A>. + Version 2.0.X of Octave uses binary data files compatible with MATLAB + version 4.2 while Octave 2.1.X uses binary data files compatible + with MATLAB version 5.0 as well as being able to read the older MATLAB 4.2 + format. +</P> +<P> + From version 1.0.1 of libsndfile onwards, libsndfile has the ability of reading + and writing a small subset of the binary data files used by both versions + of GNU Octave. + This gives people using GNU Octave for audio based work an easy method of + moving audio data between GNU Octave and other programs which use libsndfile. +</P> +<P> + For instance it is now possible to do the following: +</P> + + <UL> + <LI> Load a WAV file into a sound file editor such as + <A HREF="http://www.metadecks.org/software/sweep/">Sweep</A>. + <LI> Save it as a MAT4 file. + <LI> Load the data into Octave for manipulation. + <LI> Save the modified data. + <LI> Reload it in Sweep. + </UL> +<P> + Another example would be using the MAT4 or MAT5 file formats as a format which + can be easily loaded into Octave for viewing/analyzing as well as a format + which can be played with command line players such as the one included with + libsndfile. +</P> + +<H2><B>Details</B></H2> +<P> + Octave, like most programming languages, uses variables to store data, and + Octave variables can contain both arrays and matrices. + It is also able to store one or more of these variables in a file. + When reading Octave files, libsndfile expects a file to contain two + variables and their associated data. + The first variable should contain a variable holding the file sample rate + while the second variable contains the audio data. +</P> +<P> + For example, to generate a sine wave and store it as a binary file which + is compatible with libsndfile, do the following: +</P> +<PRE> + octave:1 > samplerate = 44100 ; + octave:2 > wavedata = sin ((0:1023)*2*pi/1024) ; + octave:3 > save sine.mat samplerate wavedata +</PRE> + +<P> + The process of reading and writing files compatible with libsndfile can be + made easier by use of two Octave script files : +</P> +<PRE> + octave:4 > [data fs] = sndfile_load ("sine.mat") ; + octave:5 > sndfile_save ("sine2.mat", data, fs) ; +</PRE> +<P> + In addition, libsndfile contains a command line program which which is able + to play the correct types of Octave files. + Using this command line player <B>sndfile-play</B> and a third Octave script + file allows Octave data to be played from within Octave on any of the platforms + which <B>sndfile-play</B> supports (at the moment: Linux, MacOS X, Solaris and + Win32). +</P> +<PRE> + octave:6 > sndfile_play (data, fs) ; +</PRE> +<P> + These three Octave scripts are installed automatically in Octave's site + script directory when libsndfile is installed (except on Win32) ie when + libsndfile is being installed into /usr/local, the Octave scripts will + be installed in /usr/local/share/octave/site/m/. +</P> + +<P> + There are some other Octave scripts for audio to be found + <A HREF="http://octave.sourceforge.net/index/audio.html">here</A>. +</P> + +<BR> +<!-- ========================================================================= --> + +<HR> +<P> + The libsndfile home page is here : + <A HREF="http://www.mega-nerd.com/libsndfile/"> + http://www.mega-nerd.com/libsndfile/</A>. +</P> + +</BODY> +</HTML> diff --git a/doc/pkgconfig.html b/doc/pkgconfig.html new file mode 100644 index 0000000..c89193d --- /dev/null +++ b/doc/pkgconfig.html @@ -0,0 +1,71 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> + +<HEAD> + <TITLE> + libsndfile : pkg-config + </TITLE> + <META NAME="Author" CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)"> + <LINK REL="stylesheet" HREF="libsndfile.css" TYPE="text/css" MEDIA="all"> + <LINK REL="stylesheet" HREF="print.css" TYPE="text/css" MEDIA="print"> +</HEAD> + +<BODY> + +<BR> +<H1>libsndfile and pkg-config</H1> + +<P> + From version 1.0.0 libsndfile has had the ability to read and write files of + greater than 2 Gig in size on most OSes even if sizeof (long) == 4. + OSes which support this feature include Linux (2.4 kernel, glibc6) on x86, PPC and + probably others, Win32, MacOS X, *BSD, Solaris and probably others. + OSes on 64 bit processors where the default compile environment is LP64 (longs and + pointers are 64 bit ie Linux on DEC/Compaq/HP Alpha processors) automatically + support large file access. +</P> +<P> + Other OSes including Linux on 32 bit processors, 32 bit Solaris and others require + special compiler flags to add large file support. + This applies to both the compilation of the library itself and the compilation of + programs which link to the library. +</P> +<P> + Note : People using Win32, MacOS (both OS X and pre-OS X) or *BSD can disregard the + rest of this document as it does not apply to either of these OSes. +</P> +<P> + The <B>pkg-config</B> program makes finding the correct compiler flag values and + library location far easier. + During the installation of libsndfile, a file named <B>sndfile.pc</B> is installed + in the directory <B>${libdir}/pkgconfig</B> (ie if libsndfile is installed in + <B>/usr/local/lib</B>, <B>sndfile.pc</B> will be installed in + <B>/usr/local/lib/pkgconfig/</B>). +</P> +<P> + In order for pkg-config to find sndfile.pc it may be necessary to point the + environment variable <B>PKG_CONFIG_PATH</B> in the right direction. +</P> + <PRE> + export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig + </PRE> + +<P> + Then, to compile a C file into an object file, the command would be: +</P> + <PRE> + gcc `pkg-config --cflags sndfile` -c somefile.c + </PRE> +<P> + and to link a number of objects into an executable that links against libsndfile, + the command would be: +</P> + <PRE> + gcc `pkg-config --libs sndfile` obj1.o obj2.o -o program + </PRE> + +<P> + Obviously all this can be rolled into a Makefile for easier maintenance. +</P> +</BODY> +</HTML> diff --git a/doc/sndfile_info.html b/doc/sndfile_info.html new file mode 100644 index 0000000..a84f241 --- /dev/null +++ b/doc/sndfile_info.html @@ -0,0 +1,53 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> + +<HEAD> + <TITLE> + sndfile-info + </TITLE> + <META NAME="Author" CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)"> + <LINK REL="stylesheet" HREF="libsndfile.css" TYPE="text/css" MEDIA="all"> + <LINK REL="stylesheet" HREF="print.css" TYPE="text/css" MEDIA="print"> +</HEAD> + +<BODY> + +<P> + Here is an example of the output from the <B>sndfile-info</B> program distributed with + libsndfile. +</P> + +<P> + This file was opened and parsed correctly but had been truncated so that the values + in the <B>FORM</B> and <B>SSND</B> chunks were incorrect. +</P> +<PRE> + <B>erikd@hendrix ></B> examples/sndfile-info truncated.aiff + truncated.aiff + size : 200000 + FORM : 307474 (should be 199992) + AIFF + COMM : 18 + Sample Rate : 16000 + Samples : 76857 + Channels : 2 + Sample Size : 16 + SSND : 307436 (should be 199946) + Offset : 0 + Block Size : 0 + + -------------------------------- + Sample Rate : 16000 + Frames : 76857 + Channels : 2 + Bit Width : 16 + Format : 0x00020001 + Sections : 1 + Seekable : TRUE + Signal Max : 32766 + +</PRE> + + +</BODY> +</HTML> diff --git a/doc/tutorial.html b/doc/tutorial.html new file mode 100644 index 0000000..e311239 --- /dev/null +++ b/doc/tutorial.html @@ -0,0 +1,34 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> + +<HEAD> + <TITLE> + libsndfile Tutorial + </TITLE> + <META NAME="Author" CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)"> + <LINK REL="stylesheet" HREF="libsndfile.css" TYPE="text/css" MEDIA="all"> + <LINK REL="stylesheet" HREF="print.css" TYPE="text/css" MEDIA="print"> +</HEAD> + +<BODY> +<!-- pepper --> +<H1><BR>libsndfile Tutorial</H1> +<!-- pepper --> +<P> +<b>More coming soon.</b> +</P> +<!-- pepper --> +<P> +For now, the best place to look for example code is the <tt>examples/</tt> +directory of the source code distribution and the libsndfile test suite which +is located in the <tt>tests/</tt> directory of the source code distribution. +</P> +<!-- pepper --> +<!-- pepper --> +<!-- pepper --> +<!-- pepper --> +<!-- pepper --> +<!-- pepper --> +</BODY> +</HTML> + diff --git a/doc/win32.html b/doc/win32.html new file mode 100644 index 0000000..6ee3153 --- /dev/null +++ b/doc/win32.html @@ -0,0 +1,53 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> +<HTML> + +<HEAD> + <TITLE> + Building libsndfile on Win32 + </TITLE> + <META NAME="Author" CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)"> + <LINK REL="stylesheet" HREF="libsndfile.css" TYPE="text/css" MEDIA="all"> + <LINK REL="stylesheet" HREF="print.css" TYPE="text/css" MEDIA="print"> +</HEAD> + +<BODY> +<!-- pepper --> +<H1><BR>Building libsndfile on Win32</H1> + +<P><B> +Note : For pre-compiled binaries for windows, both for win32 and win64, see the +main web page. +</B></P> + +<P> +There is currently only one way of building libsndfile for Win32 and Win64; +cross compiling from Linux using the MinGW cross compiler. +</P> + +<P> +libsndfile is written to be compiled by a compiler which supports large +chunks of the 1999 ISO C Standard. +Unfortunately, the microsoft compiler supports close to nothing of this +standard and hence is not suitable for libsndfile. +</P> + +<P> +It <b>may</b> be possible to compile libsndfile on windows using the + <a href="http://www.mingw.org/">MinGW</a> +compiler suite, but I haven't tested that and have no interest in supporting +that. +</P> + +<!--===========================================================================--> + +<!-- pepper --> +<!-- pepper --> +<!-- pepper --> +<BR> +<!-- pepper --> +<!-- pepper --> +<!-- pepper --> +<!-- pepper --> + +</BODY> +</HTML> |